Java を使用して CSV ファイルにデータを書き込む

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java を使用して CSV (Comma-Separated Values、カンマ区切り値) ファイルにデータを書き込む方法を学びます。CSV ファイルは表形式のデータを保存するための一般的な形式であり、異なるアプリケーション間でのデータ交換に広く使用されています。

OpenCSV ライブラリを使用します。このライブラリは Java で CSV ファイルを書き込んだり読み込んだりするための簡単なメソッドを提供します。この実験の終わりまでに、新しい CSV ファイルにデータを書き込み、既存のファイルに追加データを追加できる Java プログラムを作成することができるようになります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/io("IO") subgraph Lab Skills java/output -.-> lab-117458{{"Java を使用して CSV ファイルにデータを書き込む"}} java/packages_api -.-> lab-117458{{"Java を使用して CSV ファイルにデータを書き込む"}} java/files -.-> lab-117458{{"Java を使用して CSV ファイルにデータを書き込む"}} java/create_write_files -.-> lab-117458{{"Java を使用して CSV ファイルにデータを書き込む"}} java/io -.-> lab-117458{{"Java を使用して CSV ファイルにデータを書き込む"}} end

CSV ファイルの理解とプロジェクトのセットアップ

CSV (Comma-Separated Values、カンマ区切り値) は、表形式のデータを保存するために使用されるシンプルなファイル形式です。CSV ファイルの各行はデータの 1 行を表し、行内の値はカンマで区切られます。たとえば、学生データを含む CSV ファイルは次のようになります。

Name,Age,Email
John Doe,25,[email protected]
Jane Smith,22,[email protected]

では、CSV ファイルを扱うためのシンプルな Maven プロジェクトを作成して始めましょう。Maven はビルド自動化ツールで、プロジェクトの依存関係を管理するのに役立ちます。

  1. まず、WebIDE でターミナルを開き、プロジェクトディレクトリに移動します。
cd ~/project/csv-writer
  1. プロジェクトディレクトリに pom.xml という名前の新しいファイルを作成します。このファイルは、プロジェクトの構造と依存関係を定義します。
touch pom.xml
  1. 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 ファイルの読み書きに使用するシンプルなクラスを提供します。

  1. Java ソースコードのディレクトリ構造を作成します。
mkdir -p src/main/java/com/example

このコマンドは、Java ソースコードの標準的な Maven ディレクトリ構造を作成します。

シンプルな CSV 書き込みプログラムの作成

OpenCSV の依存関係を持つプロジェクトをセットアップしたので、CSV ファイルにデータを書き込む Java プログラムを作成できます。

  1. 先ほど作成したディレクトリ構造内に、CSVWriterExample.java という名前の新しい Java クラスファイルを作成します。
touch src/main/java/com/example/CSVWriterExample.java
  1. 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", "[email protected]"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "[email protected]"};
            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: 書き込むファイルを指定します。
  • 区切り文字: フィールドを区切るために使用される文字 (デフォルトはカンマ)
  • 引用符文字: フィールドを引用するために使用される文字 (デフォルトは二重引用符)
  • エスケープ文字: 特殊文字をエスケープするために使用される文字 (デフォルトはバックスラッシュ)
  • 行末文字: 行を終了するために使用される文字 (デフォルトは改行)
  1. Maven を使用して Java プログラムをコンパイルします。
cd ~/project/csv-writer
mvn compile

このコマンドは、Maven ビルドシステムを使用して Java ソースコードをコンパイルします。

CSV 書き込みプログラムの実行

Java プログラムを実行して CSV ファイルを作成し、結果を確認しましょう。

  1. Maven を使用してコンパイル済みの Java プログラムを実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"

exec-maven-plugin に関するエラーメッセージが表示された場合は、pom.xml にこのプラグインを追加する必要があります。

  1. 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>
  1. 再度プログラムを実行します。
mvn exec:java

ターミナルの出力に "CSV file created successfully!" というメッセージが表示されるはずです。

  1. CSV ファイルが作成され、期待されるデータが含まれていることを確認しましょう。
cat students.csv

出力には CSV ファイルの内容が表示され、次のようになります。

"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"

各フィールドの周りに引用符が含まれていることに注意してください。これは OpenCSV のデフォルトの動作で、カンマなどの特殊文字を含むフィールドを処理するのに役立ちます。

既存の CSV ファイルにデータを追加する

CSV ファイルを作成したので、Java プログラムを変更して、既存のファイルを上書きするのではなく、追加のデータを追加するようにしましょう。

  1. CSVAppendExample.java という名前の新しい Java ファイルを作成します。
touch src/main/java/com/example/CSVAppendExample.java
  1. 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", "[email protected]"};
            writer.writeNext(student3);

            String[] student4 = {"Maria Garcia", "23", "[email protected]"};
            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 を作成します。
  • ファイルにすでにヘッダー行があるため、ヘッダー行を書き込みません。
  1. 既存の CSV ファイルにデータを追加するためにプログラムを実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
  1. 現在の CSV ファイルの内容を確認しましょう。
cat students.csv

元のデータに新しく追加されたレコードが含まれているはずです。

"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"
"Robert Johnson","24","[email protected]"
"Maria Garcia","23","[email protected]"

ご覧の通り、新しいデータは既存の内容を乱すことなくファイルの末尾に追加されました。

  1. カスタム区切り文字を使用して CSV ファイルを書き込む例をもう 1 つ作成しましょう。
touch src/main/java/com/example/CSVCustomExample.java
  1. 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", "[email protected]"};
            writer.writeNext(student1);

            String[] student2 = {"Jane Smith", "22", "[email protected]"};
            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 ファイルを作成します。これは、カンマが小数点区切り文字として使用される一部のヨーロッパ諸国で一般的です。

  1. カスタム区切り文字の例を実行します。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
  1. 新しい CSV ファイルの内容を確認します。
cat students_semicolon.csv

セミコロンを区切り文字とする CSV ファイルが表示されるはずです。

"Name";"Age";"Email"
"John Doe";"25";"[email protected]"
"Jane Smith";"22";"[email protected]"

まとめ

この実験では、OpenCSV ライブラリを使用して Java で CSV ファイルにデータを書き込む方法を学びました。以下のことを成功させました。

  1. OpenCSV の依存関係を持つ Java プロジェクトをセットアップしました。
  2. 新しい CSV ファイルにデータを書き込む基本的な Java プログラムを作成しました。
  3. 既存の CSV ファイルにデータを追加するようにプログラムを変更しました。
  4. 異なる区切り文字を持つカスタム CSV ライターを作成しました。

これらのスキルは、データエクスポート、レポート生成、システム間のデータ交換など、多くのアプリケーションに役立ちます。CSV は、そのシンプルさとスプレッドシートソフトウェアやデータ分析ツールとの互換性のため、広く使用されている形式です。

いくつかの重要なポイントをまとめます。

  • OpenCSV の CSVWriter クラスは、Java で CSV ファイルを書き込む簡単な方法を提供します。
  • 新しい CSV ファイルを作成するには、CSVWriter とともに new FileWriter(filename) を使用します。
  • 既存の CSV ファイルに追加するには、CSVWriter とともに new FileWriter(filename, true) を使用します。
  • すべてのデータがファイルに書き込まれることを確認するために、常に writer.close() を使用してライターを閉じます。
  • CSV 形式の区切り文字、引用符、その他の側面をカスタマイズすることができます。

これらの基本事項を踏まえて、Java アプリケーションに CSV 書き込み機能を組み込むことができるはずです。