概要
今回は、業務にてcsvファイルにデータを書き込む処理を作成することになり、その際に学習したJacksonを利用したcsvファイルへの出力方法についてサンプルと合わせて説明する。
csvファイルの出力方法csvファイルへの出力方法はObjectWritet.writerValue()を用いてcsvファイルにレコードを出力する。サンプルを以下に示す。
try (OutputStream outstream = new FileOutputStream(csvFile, true)) { // ①
// CSV設定
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(csvファイルに出力するデータのクラス);// ②
// ヘッダ部用CSVライター作成
ObjectWriter headerWriter = mapper.writer(schema);
// ヘッダ部をCsvファイルに出力.
headerWriter.writeValue(outstream, csvファイルに出力したいデータ);// ③
} catch (IOException e) {
// 例外処理
}
① FileOutputStreamのインスタンスを作成する際の第一引数のcsvFileはFileクラス、第二引数は追記するかどうかのフラグでtrueの場合ファイルの最後に書き込み、falseの場合ファイルに上書きされる。
② mapper.schemaFor()の引数にはcsvファイルに書き込むデータのクラスを指定する。(書き込むデータのクラスがTestDTOの場合TestDto.classを引数に渡す。)
③ ①で作成したoutputStreamにデータを書き込む。
また、csvファイルに複数回にわたって異なるデータを書き込む場合はObjectWriterをその都度作成しファイルが書き込むたびにクローズしないよう以下の設定をする必要がある。
mapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
さらにcsvファイルに日時のデータを書き込む際以下の設定をすることでフォーマットを規定することができる。
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(LocalDateのフォーマット)));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(LocalTimeのフォーマット)));
mapper.registerModule(javaTimeModule);
- 閲覧数 6186
コメントを追加