JavaでCSVファイルを扱う機会は、業務システムやデータ処理などで多くあります。本記事では、BufferedReaderとOpenCSVという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
項目 | BufferedReader | OpenCSV |
---|---|---|
使用ライブラリ | Java標準 | 外部ライブラリ必要 |
クォート・エスケープ対応 | ✕ 手動処理が必要 | 〇 自動処理 |
シンプルさ | △ 分割処理が必要 | ◎ APIが簡潔 |
拡張性 | △ 手動実装が必要 | ◎ Beanバインディングも可能 |
どちらを使うべき?
- 簡単なCSV(カンマ区切りのみ) → BufferedReader
- 複雑なCSV(カンマやクォート含む) → OpenCSV
- 業務用途・保守性重視 → OpenCSV
まとめ
項目 | 内容 |
---|---|
標準でやる | BufferedReader + split() |
高機能を使う | OpenCSV + CSVReader |
使い分けのコツ | 「シンプルならBufferedReader」「拡張性ならOpenCSV」 |
補足:CSVが正しく読めないときの対処法
- エンコーディング(UTF-8/BOM付きなど)を確認
- 改行コード(CRLF vs LF)に注意
- ファイルのパスを絶対パスで指定して試す
あとがき
CSV処理は地味ながらも実務での登場頻度が高く、堅実なスキルです。BufferedReaderもOpenCSVも状況に応じて使い分けることで、効率的な開発が可能になります。