JavaでCSVファイルに書き込む方法
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でから入手できます。