はじめに
この実験では、Java を使用して CSV (Comma-Separated Values、カンマ区切り値) ファイルにデータを書き込む方法を学びます。CSV ファイルは表形式のデータを保存するための一般的な形式であり、異なるアプリケーション間でのデータ交換に広く使用されています。
OpenCSV ライブラリを使用します。このライブラリは Java で CSV ファイルを書き込んだり読み込んだりするための簡単なメソッドを提供します。この実験の終わりまでに、新しい CSV ファイルにデータを書き込み、既存のファイルに追加データを追加できる Java プログラムを作成することができるようになります。
CSV ファイルの理解とプロジェクトのセットアップ
CSV (Comma-Separated Values、カンマ区切り値) は、表形式のデータを保存するために使用されるシンプルなファイル形式です。CSV ファイルの各行はデータの 1 行を表し、行内の値はカンマで区切られます。たとえば、学生データを含む CSV ファイルは次のようになります。
Name,Age,Email
John Doe,25,john.doe@example.com
Jane Smith,22,jane.smith@example.com
では、CSV ファイルを扱うためのシンプルな Maven プロジェクトを作成して始めましょう。Maven はビルド自動化ツールで、プロジェクトの依存関係を管理するのに役立ちます。
- まず、WebIDE でターミナルを開き、プロジェクトディレクトリに移動します。
cd ~/project/csv-writer
- プロジェクトディレクトリに
pom.xmlという名前の新しいファイルを作成します。このファイルは、プロジェクトの構造と依存関係を定義します。
touch pom.xml
- WebIDE エディタで
pom.xmlファイルを開き、次の内容を追加します。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
</project>
この XML ファイルは、プロジェクトを定義し、OpenCSV ライブラリ (バージョン 5.4) を依存関係として追加します。OpenCSV は、CSV ファイルの読み書きに使用するシンプルなクラスを提供します。
- Java ソースコードのディレクトリ構造を作成します。
mkdir -p src/main/java/com/example
このコマンドは、Java ソースコードの標準的な Maven ディレクトリ構造を作成します。
シンプルな CSV ライタープログラムの作成
OpenCSV の依存関係を持つプロジェクトをセットアップしたので、CSV ファイルにデータを書き込む Java プログラムを作成できます。
- 先ほど作成したディレクトリ構造内に、
CSVWriterExample.javaという名前の新しい Java クラスファイルを作成します。
touch src/main/java/com/example/CSVWriterExample.java
- WebIDE エディタで
CSVWriterExample.javaを開き、次のコードを追加します。
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVWriterExample {
public static void main(String[] args) {
try {
// Create a new CSVWriter instance
// The first parameter is a FileWriter with the file path
// The second parameter is the separator character (default is comma)
// The third parameter is the quote character (default is double quote)
// The fourth parameter is the escape character (default is backslash)
// The fifth parameter is the line ending (default is newline)
CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "john.doe@example.com"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
writer.writeNext(student2);
// Close the writer to flush and release resources
writer.close();
System.out.println("CSV file created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
このコードは以下のことを行います。
- OpenCSV ライブラリと Java の入出力パッケージから必要なクラスをインポートします。
students.csvという名前のファイルに書き込むCSVWriterオブジェクトを作成します。- フィールド名を含むヘッダー行を書き込みます。
- 2 行の学生データを書き込みます。
- すべてのデータがファイルに書き込まれるように、ライターを閉じます。
CSVWriter のコンストラクタには 5 つのパラメータがあります。
FileWriter: 書き込むファイルを指定します。- 区切り文字:フィールドを区切るために使用される文字 (デフォルトはカンマ)
- 引用符文字:フィールドを引用するために使用される文字 (デフォルトは二重引用符)
- エスケープ文字:特殊文字をエスケープするために使用される文字 (デフォルトはバックスラッシュ)
- 行末文字:行を終了するために使用される文字 (デフォルトは改行)
- Maven を使用して Java プログラムをコンパイルします。
cd ~/project/csv-writer
mvn compile
このコマンドは、Maven ビルドシステムを使用して Java ソースコードをコンパイルします。
CSV ライタープログラムの実行
Java プログラムを実行して CSV ファイルを作成し、結果を確認しましょう。
- Maven を使用してコンパイル済みの Java プログラムを実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"
exec-maven-plugin に関するエラーメッセージが表示された場合は、pom.xml にこのプラグインを追加する必要があります。
- WebIDE エディタで
pom.xmlを開き、exec-maven-pluginを含めるように更新します。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.example.CSVWriterExample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 再度プログラムを実行します。
mvn exec:java
ターミナルの出力に "CSV file created successfully!" というメッセージが表示されるはずです。
- CSV ファイルが作成され、期待されるデータが含まれていることを確認しましょう。
cat students.csv
出力には CSV ファイルの内容が表示され、次のようになります。
"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"
各フィールドの周りに引用符が含まれていることに注意してください。これは OpenCSV のデフォルトの動作で、カンマなどの特殊文字を含むフィールドを処理するのに役立ちます。
既存の CSV ファイルにデータを追加する
CSV ファイルを作成したので、Java プログラムを変更して、既存のファイルを上書きするのではなく、追加のデータを追加するようにしましょう。
CSVAppendExample.javaという名前の新しい Java ファイルを作成します。
touch src/main/java/com/example/CSVAppendExample.java
- WebIDE エディタで
CSVAppendExample.javaを開き、次のコードを追加します。
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVAppendExample {
public static void main(String[] args) {
try {
// Create a CSVWriter in append mode by setting the second parameter of FileWriter to true
CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));
// Write additional data to the existing file
String[] student3 = {"Robert Johnson", "24", "robert.johnson@example.com"};
writer.writeNext(student3);
String[] student4 = {"Maria Garcia", "23", "maria.garcia@example.com"};
writer.writeNext(student4);
// Close the writer
writer.close();
System.out.println("Data appended to CSV file successfully!");
} catch (IOException e) {
System.out.println("Error appending to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
このコードは前の例と似ていますが、2 つの重要な違いがあります。
FileWriterの 2 番目のパラメータをtrueに設定することで、追加モードでCSVWriterを作成します。- ファイルにすでにヘッダー行があるため、ヘッダー行を書き込みません。
- 既存の CSV ファイルにデータを追加するためにプログラムを実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
- 現在の CSV ファイルの内容を確認しましょう。
cat students.csv
元のデータに新しく追加されたレコードが含まれているはずです。
"Name","Age","Email"
"John Doe","25","john.doe@example.com"
"Jane Smith","22","jane.smith@example.com"
"Robert Johnson","24","robert.johnson@example.com"
"Maria Garcia","23","maria.garcia@example.com"
ご覧の通り、新しいデータは既存の内容を乱すことなくファイルの末尾に追加されました。
- カスタム区切り文字を使用して CSV ファイルを書き込む例をもう 1 つ作成しましょう。
touch src/main/java/com/example/CSVCustomExample.java
- WebIDE エディタで
CSVCustomExample.javaを開き、次のコードを追加します。
package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVCustomExample {
public static void main(String[] args) {
try {
// Create a CSVWriter with semicolon as separator instead of comma
CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
';',
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "john.doe@example.com"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "jane.smith@example.com"};
writer.writeNext(student2);
// Close the writer
writer.close();
System.out.println("CSV file with semicolon separator created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
この例では、カンマの代わりにセミコロンを区切り文字として使用して CSV ファイルを作成します。これは、カンマが小数点区切り文字として使用される一部のヨーロッパ諸国で一般的です。
- カスタム区切り文字の例を実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
- 新しい CSV ファイルの内容を確認します。
cat students_semicolon.csv
セミコロンを区切り文字とする CSV ファイルが表示されるはずです。
"Name";"Age";"Email"
"John Doe";"25";"john.doe@example.com"
"Jane Smith";"22";"jane.smith@example.com"
まとめ
この実験では、OpenCSV ライブラリを使用して Java で CSV ファイルにデータを書き込む方法を学びました。以下のことを成功させました。
- OpenCSV の依存関係を持つ Java プロジェクトをセットアップしました。
- 新しい CSV ファイルにデータを書き込む基本的な Java プログラムを作成しました。
- 既存の CSV ファイルにデータを追加するようにプログラムを変更しました。
- 異なる区切り文字を持つカスタム CSV ライターを作成しました。
これらのスキルは、データエクスポート、レポート生成、システム間のデータ交換など、多くのアプリケーションに役立ちます。CSV は、そのシンプルさとスプレッドシートソフトウェアやデータ分析ツールとの互換性のため、広く使用されている形式です。
いくつかの重要なポイントをまとめます。
- OpenCSV の
CSVWriterクラスは、Java で CSV ファイルを書き込む簡単な方法を提供します。 - 新しい CSV ファイルを作成するには、
CSVWriterとともにnew FileWriter(filename)を使用します。 - 既存の CSV ファイルに追加するには、
CSVWriterとともにnew FileWriter(filename, true)を使用します。 - すべてのデータがファイルに書き込まれることを確認するために、常に
writer.close()を使用してライターを閉じます。 - CSV 形式の区切り文字、引用符、その他の側面をカスタマイズすることができます。
これらの基本事項を踏まえて、Java アプリケーションに CSV 書き込み機能を組み込むことができるはずです。



