JavaのライブラリjacksonでCSVを読み込む方法
jackson-dataformat-csvライブラリを使用してCSVやTSVを読み込むことができます。
| Jackson | バージョン |
|---|---|
| Jackson Dataformat CSV | 2.10.0 |
CSVを表すクラスを作成します。
package jp.co.jacksoncsv;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"id", "name"})
public class Csv {
@JsonProperty("id")
private String id;
@JsonProperty("name")
private String name;
}
実際のCSVは以下のようにヘッダなしとします。
1,takahashi 2,higashiguchi
CsvMapperクラス、CsvSchemaクラスを使用してCSVファイルを1行ずつ読み込みます。
package jp.co.jacksoncsv;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
public class SampleJackson1 {
public static void main(String[] args) throws IOException {
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Csv.class);
Path path = Paths.get(System.getProperty("user.dir") + "\\sample.csv");
try (BufferedReader br = Files.newBufferedReader(path)) {
MappingIterator<Csv> it = mapper.readerFor(Csv.class).with(schema).readValues(br);
while (it.hasNextValue()) { // 1行ずつ読み込む
Csv csv = it.nextValue();
System.out.println(csv.getId() + ":" + csv.getName());
}
}
}
}
出力結果は以下の通りです。
1,takahashi 2,higashiguchi
ヘッダ行があるCSVの場合
ヘッダ行があるCSVの場合、以下withHeader()メソッドを追加します。
CsvSchema schema = mapper.schemaFor(Csv.class).withHeader();

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^

コメント