JavaのライブラリjacksonでCSVを読み込む方法

JavaのライブラリjacksonでCSVを読み込む方法

jackson-dataformat-csvライブラリを使用してCSVやTSVを読み込むことができます。

Jackson バージョン
Jackson Dataformat CSV 2.10.0

Jackson Dataformat CSV

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();

コメント

タイトルとURLをコピーしました