JavaでCSVファイルを読み込む方法まとめ|BufferedReader・OpenCSV比較

JavaでCSVファイルを扱う機会は、業務システムやデータ処理などで多くあります。本記事では、BufferedReaderOpenCSVという2つの代表的な方法でCSVを読み込む実装方法を、図解付きでわかりやすく解説します。


この記事でわかること

  • JavaでCSVファイルを読み込む2つの方法(BufferedReaderとOpenCSV)
  • それぞれの特徴・メリット・デメリット
  • サンプルコードと実行結果
  • 用途別の使い分け方

前提条件

  • Java 8以降がインストールされている
  • EclipseやIntelliJなどのIDEが使える
  • Maven(またはGradle)が使用可能(OpenCSVを使う場合)

CSVファイルの例

id,name,age
1,Taro,23
2,Hanako,30
3,Jiro,28

方法1:BufferedReaderでCSVを読み込む(標準機能)

▶特徴

  • Java標準ライブラリのみで実装可能
  • シンプルだが、カンマ区切りの扱いやエスケープ処理が手動になる

サンプルコード

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CsvReaderBuffered {
    public static void main(String[] args) {
        String path = "sample.csv";
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] values = line.split(",");
                for (String val : values) {
                    System.out.print(val + "\t");
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

BufferedReaderの読み込みイメージ

[CSVファイル]
↓(1行ずつ読み込み)
[BufferedReader]
↓(カンマで分割)
[String[] values]
↓(ループ出力)
[コンソール]

方法2:OpenCSVでCSVを読み込む(外部ライブラリ)

▶特徴

  • 複雑なCSV(クォート・エスケープ付き)にも対応
  • 便利なAPIで簡潔なコードにできる

Maven依存追加

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>5.8</version>
</dependency>

サンプルコード

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

public class CsvReaderOpenCSV {
    public static void main(String[] args) {
        String path = "sample.csv";
        try (CSVReader reader = new CSVReader(new FileReader(path))) {
            List<String[]> lines = reader.readAll();
            for (String[] line : lines) {
                for (String val : line) {
                    System.out.print(val + "\t");
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

OpenCSVの読み込みイメージ

[CSVファイル]
↓(CSVReaderで解析)
[List<String[]> lines]
↓(ループ出力)
[コンソール]

比較表:BufferedReader vs OpenCSV

項目BufferedReaderOpenCSV
使用ライブラリJava標準外部ライブラリ必要
クォート・エスケープ対応✕ 手動処理が必要〇 自動処理
シンプルさ△ 分割処理が必要◎ APIが簡潔
拡張性△ 手動実装が必要◎ Beanバインディングも可能

どちらを使うべき?

  • 簡単なCSV(カンマ区切りのみ) → BufferedReader
  • 複雑なCSV(カンマやクォート含む) → OpenCSV
  • 業務用途・保守性重視 → OpenCSV

まとめ

項目内容
標準でやるBufferedReader + split()
高機能を使うOpenCSV + CSVReader
使い分けのコツ「シンプルならBufferedReader」「拡張性ならOpenCSV」

補足:CSVが正しく読めないときの対処法

  • エンコーディング(UTF-8/BOM付きなど)を確認
  • 改行コード(CRLF vs LF)に注意
  • ファイルのパスを絶対パスで指定して試す

あとがき

CSV処理は地味ながらも実務での登場頻度が高く、堅実なスキルです。BufferedReaderもOpenCSVも状況に応じて使い分けることで、効率的な開発が可能になります。

タイトルとURLをコピーしました