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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント