Jacksonを利用したcsvファイルへの出力方法

  •  
 
yokoe2021年8月26日 - 10:32 に投稿

タグ

概要

今回は、業務にて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);

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。