Java – CSVファイルに書き込み・追記する方法を解説
JavaでCSVファイルに書き込みや追記を行うには、FileWriterやBufferedWriterを使用します。
FileWriterのコンストラクタでtrueを指定すると追記モードになります。
データをカンマ区切りで書き込み、行ごとに改行を追加します。
PrintWriterを併用すると簡潔に記述可能です。
外部ライブラリ(例: OpenCSV)を使うと、エスケープ処理や複雑な操作が容易になります。
JavaでCSVファイルに書き込む方法
JavaでCSVファイルにデータを書き込むには、標準のファイル入出力機能を使用する方法と、外部ライブラリを利用する方法があります。
ここでは、標準のJava機能を使った基本的な書き込み方法を解説します。
必要なインポート文
CSVファイルに書き込むためには、以下のインポート文が必要です。
import java.io.BufferedWriter; // バッファリングされた書き込みを行うため
import java.io.FileWriter; // ファイルに書き込むため
import java.io.IOException; // 入出力例外を処理するため以下は、JavaでCSVファイルにデータを書き込むサンプルコードです。
ファイル名はoutput.csvとし、サンプルデータを3行書き込みます。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 書き込むファイル名
        String[] data = { "名前,年齢,性別", "田中,30,男性", "佐藤,25,女性" }; // 書き込むデータ
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            for (String line : data) {
                writer.write(line); // データを書き込む
                writer.newLine(); // 改行を追加
            }
            System.out.println("CSVファイルに書き込みました。"); // 完了メッセージ
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}上記のコードを実行すると、output.csvファイルに以下の内容が書き込まれます。
名前,年齢,性別
田中,30,男性
佐藤,25,女性このコードでは、BufferedWriterとFileWriterを使用してCSVファイルにデータを書き込んでいます。
try-with-resources文を使うことで、リソースの自動クローズが行われ、エラー処理も簡潔に記述できます。
CSV形式では、カンマで区切られたデータを行ごとに書き込むことが一般的です。
JavaでCSVファイルに追記する方法
既存のCSVファイルに新しいデータを追記するには、FileWriterのコンストラクタにtrueを指定して、追記モードでファイルを開く必要があります。
ここでは、追記の方法を解説します。
必要なインポート文
CSVファイルに追記するためには、以下のインポート文が必要です。
import java.io.BufferedWriter; // バッファリングされた書き込みを行うため
import java.io.FileWriter; // ファイルに書き込むため
import java.io.IOException; // 入出力例外を処理するため以下は、既存のCSVファイルにデータを追記するサンプルコードです。
ファイル名はoutput.csvとし、新しいデータを2行追記します。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 追記するファイル名
        String[] newData = { "鈴木,28,男性", "山田,22,女性" }; // 追記するデータ
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) {
            for (String line : newData) {
                writer.write(line); // データを追記する
                writer.newLine(); // 改行を追加
            }
            System.out.println("CSVファイルに追記しました。"); // 完了メッセージ
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}上記のコードを実行すると、output.csvファイルに以下の内容が追記されます。
鈴木,28,男性
山田,22,女性このコードでは、FileWriterの第二引数にtrueを指定することで、追記モードでファイルを開いています。
これにより、既存のデータを保持したまま新しいデータを追加することができます。
BufferedWriterを使用することで、効率的にデータを書き込むことが可能です。
追記する際も、各行の末尾に改行を追加することを忘れないようにしましょう。
OpenCSVを使ったCSVファイルの操作
OpenCSVは、JavaでCSVファイルを簡単に操作するための便利なライブラリです。
CSVの読み書きが簡潔に行えるため、特に大規模なデータ処理において非常に役立ちます。
ここでは、OpenCSVを使ったCSVファイルの書き込みと読み込みの方法を解説します。
OpenCSVの導入
OpenCSVを使用するには、まずMavenプロジェクトに依存関係を追加する必要があります。
以下の依存関係をpom.xmlに追加してください。
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.5.2</version> <!-- 最新のバージョンを確認してください -->
</dependency>必要なインポート文
OpenCSVを使用するためには、以下のインポート文が必要です。
import com.opencsv.CSVWriter; // CSVファイルに書き込むため
import com.opencsv.CSVReader; // CSVファイルを読み込むため
import java.io.FileWriter; // ファイルに書き込むため
import java.io.FileReader; // ファイルを読み込むため
import java.io.IOException; // 入出力例外を処理するため
import java.util.List; // リストを使用するためサンプルコード:CSVファイルへの書き込み
以下は、OpenCSVを使ってCSVファイルにデータを書き込むサンプルコードです。
ファイル名はoutput.csvとし、サンプルデータを3行書き込みます。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 書き込むファイル名
        String[] header = { "名前", "年齢", "性別" }; // ヘッダー
        String[][] data = { 
            { "田中", "30", "男性" }, 
            { "佐藤", "25", "女性" },
            { "鈴木", "28", "男性" } 
        }; // 書き込むデータ
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName))) {
            writer.writeNext(header); // ヘッダーを書き込む
            writer.writeAll(List.of(data)); // データを書き込む
            System.out.println("CSVファイルに書き込みました。"); // 完了メッセージ
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}サンプルコード:CSVファイルの読み込み
次に、OpenCSVを使ってCSVファイルからデータを読み込むサンプルコードを示します。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 読み込むファイル名
        try (CSVReader reader = new CSVReader(new FileReader(fileName))) {
            List<String[]> rows = reader.readAll(); // 全行を読み込む
            for (String[] row : rows) {
                System.out.println(String.join(", ", row)); // 行を表示
            }
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}書き込みのサンプルコードを実行した後、読み込みのサンプルコードを実行すると、以下の内容が表示されます。
名前, 年齢, 性別
田中, 30, 男性
佐藤, 25, 女性
鈴木, 28, 男性OpenCSVを使用することで、CSVファイルの読み書きが非常に簡単になります。
CSVWriterを使ってデータを書き込む際には、ヘッダーとデータをそれぞれ書き込むことができます。
また、CSVReaderを使ってファイルを読み込むと、全行をリストとして取得でき、各行を簡単に表示することができます。
OpenCSVは、特に大量のデータを扱う際に非常に便利なライブラリです。
実践例:CSVファイルへのデータ書き込みと追記
ここでは、Javaを使用してCSVファイルにデータを書き込み、その後に追記する実践的な例を示します。
この例では、OpenCSVライブラリを使用して、データの書き込みと追記を行います。
必要なインポート文
以下のインポート文が必要です。
OpenCSVを使用するため、Mavenプロジェクトに依存関係を追加していることを前提とします。
import com.opencsv.CSVWriter; // CSVファイルに書き込むため
import com.opencsv.CSVReader; // CSVファイルを読み込むため
import java.io.FileWriter; // ファイルに書き込むため
import java.io.FileReader; // ファイルを読み込むため
import java.io.IOException; // 入出力例外を処理するため
import java.util.List; // リストを使用するためサンプルコード:CSVファイルへの書き込み
まず、CSVファイルにデータを書き込むコードを示します。
ファイル名はoutput.csvとし、初期データを3行書き込みます。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 書き込むファイル名
        String[] header = { "名前", "年齢", "性別" }; // ヘッダー
        String[][] initialData = { 
            { "田中", "30", "男性" }, 
            { "佐藤", "25", "女性" },
            { "鈴木", "28", "男性" } 
        }; // 初期データ
        // CSVファイルに書き込む
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName))) {
            writer.writeNext(header); // ヘッダーを書き込む
            writer.writeAll(List.of(initialData)); // 初期データを書き込む
            System.out.println("初期データをCSVファイルに書き込みました。"); // 完了メッセージ
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}サンプルコード:CSVファイルへの追記
次に、既存のCSVファイルに新しいデータを追記するコードを示します。
新しいデータとして2行を追加します。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 追記するファイル名
        String[][] newData = { 
            { "山田", "22", "女性" }, 
            { "高橋", "35", "男性" } 
        }; // 追記するデータ
        // CSVファイルに追記する
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName, true))) {
            writer.writeAll(List.of(newData)); // 新しいデータを追記する
            System.out.println("新しいデータをCSVファイルに追記しました。"); // 完了メッセージ
        } catch (IOException e) {
            e.printStackTrace(); // エラーが発生した場合の処理
        }
    }
}最初の書き込みのサンプルコードを実行した後、追記のサンプルコードを実行すると、output.csvファイルには以下の内容が含まれます。
名前,年齢,性別
田中,30,男性
佐藤,25,女性
鈴木,28,男性
山田,22,女性
高橋,35,男性この実践例では、最初にCSVファイルにヘッダーと初期データを書き込み、その後に新しいデータを追記しています。
CSVWriterのコンストラクタにtrueを指定することで、追記モードでファイルを開いています。
これにより、既存のデータを保持したまま新しいデータを追加することができます。
OpenCSVを使用することで、CSVファイルの操作が非常に簡単かつ効率的に行えることがわかります。
エラー処理とデバッグのポイント
JavaでCSVファイルを操作する際には、さまざまなエラーが発生する可能性があります。
ここでは、エラー処理の方法とデバッグのポイントについて解説します。
これにより、プログラムの信頼性を向上させ、問題を迅速に特定することができます。
一般的なエラーの種類
CSVファイルの操作において、以下のようなエラーが一般的に発生します。
| エラーの種類 | 説明 | 
|---|---|
| IOException | ファイルの入出力に関するエラー | 
| FileNotFoundException | 指定したファイルが見つからないエラー | 
| CsvException | OpenCSV特有のエラー | 
| ArrayIndexOutOfBoundsException | 配列のインデックスが範囲外のエラー | 
エラー処理の基本
エラー処理は、try-catch文を使用して行います。
以下は、CSVファイルの書き込み時にエラー処理を行うサンプルコードです。
public class App {
    public static void main(String[] args) {
        String fileName = "output.csv"; // 書き込むファイル名
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName))) {
            // データの書き込み処理
        } catch (IOException e) {
            System.err.println("ファイルの入出力エラーが発生しました: " + e.getMessage()); // エラーメッセージ
        } catch (CsvException e) {
            System.err.println("CSV処理中にエラーが発生しました: " + e.getMessage()); // エラーメッセージ
        }
    }
}デバッグのポイント
デバッグを行う際には、以下のポイントに注意すると効果的です。
- エラーメッセージの確認: 例外が発生した場合、エラーメッセージを確認することで問題の特定が容易になります。
 - ログ出力の活用: 
System.out.printlnやロギングライブラリを使用して、プログラムの進行状況や変数の値を出力することで、問題の発生箇所を特定しやすくなります。 - 小さな単位でのテスト: 大きなプログラムを一度に実行するのではなく、小さな単位でテストを行うことで、エラーの発生を早期に発見できます。
 - デバッガの使用: IDEに搭載されているデバッガを使用して、プログラムの実行をステップごとに追い、変数の状態を確認することができます。
 
例外の詳細情報を取得する
例外が発生した場合、getMessage()メソッドを使用してエラーメッセージを取得することができます。
また、printStackTrace()メソッドを使用することで、エラーが発生した場所を特定するためのスタックトレースを表示できます。
catch (IOException e) {
    e.printStackTrace(); // スタックトレースを表示
}CSVファイルの操作においては、エラー処理とデバッグが非常に重要です。
適切なエラー処理を行うことで、プログラムの信頼性を向上させ、問題が発生した際には迅速に対応できるようになります。
また、デバッグのポイントを押さえることで、効率的に問題を特定し、解決することが可能です。
まとめ
この記事では、Javaを使用してCSVファイルにデータを書き込む方法や追記する方法、さらにOpenCSVライブラリを活用した操作方法について詳しく解説しました。
また、エラー処理やデバッグのポイントについても触れ、プログラムの信頼性を高めるための手法を紹介しました。
これらの知識を活かして、実際のプロジェクトでCSVファイルを効果的に扱うことに挑戦してみてください。