概要
JavaにはCSVファイルをBeanに取り込むためのライブラリで、OpenCSVというものがあります。JavaのCSVライブラリ「opencsv」の記事にある通り、列名とBeanのプロパティ名を紐付けて取り込むことができます。
今回の記事は、ファイルの値を変換してBeanに取り込むときの対応を紹介します。
対応
こちらのStackOverflowに書いてあるのが日付の変換例です。アノテーションのconverter
に変換用のクラスを設定して、変換します。
実装サンプル
文字列から日付の変換例を、実装サンプルとしてのせます。
ファイル中のcreated_at
列をLocalDateTime
型に変換します。
SampleCsvBean.java
public class SampleCsvBean {
@CsvBindByName(column = "id")
private Long id;
@CsvBindByName(column = "name")
private String name;
@CsvCustomBindByName(column = "created_at", converter = SampleConverter.class)
private LocalDateTime createdAt;
}
ファイルには20140101 00:00:00
の形式で、日付の値が設定されているとします。
これをconverterのクラス内で、LocalDateTimeにフォーマットします。
SampleConverter.java
public class SampleConverter extends AbstractBeanField {
@Override
protected Object convert(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss");
return LocalDateTime.parse(s, dtf);
}
}