JavaでCSVファイルに書き込む方法

1. 概要

この短いチュートリアルでは、Java *を使用してCSVファイルに書き込む方法を学習します。 CSVはComma-Separated-Valuesの略で、システム間でバルクデータ転送を行うための一般的な形式です。
CSVファイルを作成するには、_java.io_パッケージのクラスを使用します。
*特殊文字*とその取り扱い方法について説明します。 出力ファイルをターゲットにします。* Microsoft ExcelとGoogleスプレッドシートで開きます。*
Javaの例の後、* CSVファイルを操作するために使用可能なサードパーティライブラリをいくつか簡単に見ていきます。*

2. _PrintWriter_を使用した書き込み

CSVファイルの書き込みには、_PrintWriter_を使用します。 _java.io_を使用してファイルに書き込む方法の詳細については、https://www.baeldung.com/java-write-to-file [ファイルへの書き込みに関する記事]を参照してください。

2.1. CSVを書く

最初に、__ String__sの配列として表される1行のデータをフォーマットするメソッドを作成します。
public String convertToCSV(String[] data) {
    return Stream.of(data)
      .map(this::escapeSpecialCharacters)
      .collect(Collectors.joining(","));
}
ただし、このメソッドを呼び出す前に、次のサンプルデータを作成しましょう。
List<String[]> dataLines = new ArrayList<>();
dataLines.add(new String[]
  { "John", "Doe", "38", "Comment Data\nAnother line of comment data" });
dataLines.add(new String[]
  { "Jane", "Doe, Jr.", "19", "She said \"I'm being quoted\"" });
そして、そのデータを手に入れて、row_convertToCSV_を使用して各行を変換し、ファイルに書き込みましょう。
public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException {
    File csvOutputFile = new File(CSV_FILE_NAME);
    try (PrintWriter pw = new PrintWriter(csvOutputFile)) {
        dataLines.stream()
          .map(this::convertToCSV)
          .forEach(pw::println);
    }
    assertTrue(csvOutputFile.exists());
}

2.2. 特殊文字の処理

CSVファイルでは、特定の文字に問題があり、開発者として、データの品質を完全に制御することはほとんどありません。 *では、特殊文字の処理方法を見てみましょう。*
この例では、コンマ、引用符、および改行に注目します。 *コンマまたは引用符を含むフィールドは二重引用符で囲まれ、二重引用符は二重引用符でエスケープされます。*新しい行を削除して、それぞれを空白で置き換えます。
どの文字が問題で、どのように処理する必要があるかは、ユースケースによって異なります。
_convertToCSV_メソッドは、_String._を構築するときに、各データに対してon_escapeSpecialCharacters_メソッドを呼び出します。
_escapeSpecialCharacters_メソッドを今すぐ実装しましょう。
public String escapeSpecialCharacters(String data) {
    String escapedData = data.replaceAll("\\R", " ");
    if (data.contains(",") || data.contains("\"") || data.contains("'")) {
        data = data.replace("\"", "\"\"");
        escapedData = "\"" + data + "\"";
    }
    return escapedData;
}

3. サードパーティのライブラリ

この例で見たように、特殊文字とその処理方法について考え始めると、CSVファイルの記述が複雑になる可能性があります。
幸いなことに、* CSVファイルを操作するために利用できるサードパーティライブラリがたくさんあり*、それらの多くはこれらの特殊文字やその他の例外的なケースを処理します。
それらのいくつかを見てみましょう:
  • Apache Commons CSV
    CSVファイルを操作するためのApacheのCSV製品

  • Open CSV:もう1つの人気のある
    積極的に維持されるCSVライブラリ

  • Flatpack:オープンソースのCSVライブラリ
    積極的に開発されている

  • CSVeed:オープンソースで積極的にメンテナンスされています

4. 結論

この簡単な記事では、Java PrintWriterクラスを使用してCSVファイルを作成する方法を示しました。 次に、出力されるデータの特殊文字について説明し、処理しました。
単純なJavaの例の後、利用可能なサードパーティライブラリの概要を見ました。
サンプルコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-io[GitHubで]から入手できます。