1. 概要

このクイックチュートリアルでは、Javaを使用してCSVファイルに書き込む方法を学習します。 CSVはカンマ区切り値の略で、システム間のバルクデータ転送の一般的な形式です。

CSVファイルを作成するには、 java.ioパッケージのクラスを使用します。

特殊文字とその処理方法について説明します。 出力ファイルをMicrosoftExcelおよびGoogleスプレッドシートで開くことを目標としています。

Javaの例の後で、CSVファイルを操作するために利用できるいくつかのサードパーティライブラリを簡単に見ていきます。

2. PrintWriterで書く

CSVファイルの書き込みにはPrintWriterを使用します。 java.io を使用してファイルに書き込む方法の詳細については、ファイルへの書き込みに関する記事を参照してください。

2.1. CSVを書く

まず、Stringの配列として表される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\"" });

そのデータを手に入れて、 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を構築するときに各データに対して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の例の後、利用可能なサードパーティライブラリの概要を確認しました。

サンプルコードは、GitHubでから入手できます。