デジタルトレンドナビ
システム開発

2024.06.06

JavaでCSVファイルを読み込む方法

JavaでCSVファイルを読み込む方法について学びたいと思ったことはありませんか?CSV(Comma Separated Values)ファイルは、データを表形式で保存するための一般的なフォーマットです。プログラマーやデータアナリストにとって、CSVファイルを効率的に読み込んで処理するスキルは非常に重要です。


本記事では、Javaを使ってCSVファイルを読み込む基本的な方法から、オープンソースライブラリを活用した高度な方法までを詳しく解説します。具体的なサンプルコードを交えながら、初心者にもわかりやすく説明していきますので、ぜひ最後までお読みください。

CSVファイルとは?

CSVファイルとは、テキスト形式でデータを表形式に保存するファイル形式の一種です。各行がデータのレコードを表し、カンマで区切られた値が各列のデータを表します。たとえば、以下のような内容がCSVファイルに含まれます。

名前 年齢 職業
山田太郎 30 エンジニア
鈴木花子 25 デザイナー

CSVファイルの基本構造

CSVファイルは非常にシンプルな構造を持っています。各行はレコードを表し、カンマで区切られた各値がフィールドを表します。

一般的に、最初の行はヘッダー行として使用され、各フィールドの名前が記載されています。たとえば、上記の例では「名前」「年齢」「職業」がヘッダー行にあたります。

CSVファイルの用途

CSVファイルは、多くのアプリケーションでデータのインポートやエクスポートに利用されます。例えば、データベースからデータをエクスポートする際や、スプレッドシートソフトでデータを管理する際に便利です。

また、シンプルな構造のため、異なるプラットフォーム間でのデータ交換にも広く利用されています。

JavaでCSVファイルを読み込む準備

JavaでCSVファイルを読み込むためには、いくつかの準備が必要です。まず、必要なライブラリをインストールし、基本的な読み込み方法を理解することが重要です。

必要なライブラリのインストール

JavaでCSVファイルを読み込む際には、専用のライブラリを利用すると便利です。ここでは、代表的なライブラリとして以下の2つを紹介します。

  1. Apache Commons CSV
  2. Apacheが提供する汎用的なCSVライブラリで、シンプルで使いやすい。
  3. Apache Commons CSV
  4. OpenCSV
  5. オープンソースのCSVパーサーライブラリで、機能が豊富。
  6. OpenCSV

これらのライブラリをプロジェクトに追加する方法は、MavenまたはGradleを利用するのが一般的です。以下はMavenを利用した場合の依存関係設定例です。

Apache Commons CSVの場合

xml

org.apache.commons
commons-csv
1.9.0

OpenCSVの場合:

xml

com.opencsv
opencsv
5.5.2

基本的な読み込み方法

必要なライブラリをインストールしたら、次にCSVファイルを読み込む基本的な方法を学びます。ここでは、Apache Commons CSVを使用した基本的な読み込み手順を紹介します。

  1. CSVParserクラスを使用してファイルを読み込む
  2. 各レコードを処理する

以下に、基本的なサンプルコードを示します。

json
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

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

public class CSVReaderExample {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())) {
for (CSVRecord record : parser) {
String name = record.get(“名前”);
String age = record.get(“年齢”);
String occupation = record.get(“職業”);

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

このコードでは、CSVファイルを読み込み、各レコードの「名前」「年齢」「職業」を取得して表示しています。次のセクションでは、オープンソースライブラリを使ったより高度なCSV読み込み方法を紹介します。

オープンソースライブラリを使ったCSV読み込み

オープンソースライブラリを利用することで、CSVファイルの読み込みをより効率的かつ簡単に行うことができます。ここでは、代表的なライブラリであるApache Commons CSVとOpenCSVの使用方法を紹介します。

Apache Commons CSVの使用方法

Apache Commons CSVは、シンプルで使いやすいCSV処理ライブラリです。以下に、Apache Commons CSVを使用したCSVファイルの読み込み手順を示します。

  1. ライブラリのインストール
  2. CSVファイルの読み込みと処理

ライブラリのインストール

Mavenを使用してApache Commons CSVをプロジェクトに追加します。

json

org.apache.commons
commons-csv
1.9.0

CSVファイルの読み込みと処理

以下のコード例は、Apache Commons CSVを使用してCSVファイルを読み込み、データを表示する方法を示しています。

json
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

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

public class ApacheCommonsCSVExample {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())) {
for (CSVRecord record : parser) {
String name = record.get(“名前”);
String age = record.get(“年齢”);
String occupation = record.get(“職業”);

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

このコードは、CSVファイルを読み込み、各レコードのフィールド値を取得して表示します。

OpenCSVの使用方法

OpenCSVは、より多機能で柔軟なCSV処理ライブラリです。以下に、OpenCSVを使用したCSVファイルの読み込み手順を示します。

  1. ライブラリのインストール
  2. CSVファイルの読み込みと処理

ライブラリのインストール

Mavenを使用してOpenCSVをプロジェクトに追加します。

xml

com.opencsv
opencsv
5.5.2

CSVファイルの読み込みと処理

以下のコード例は、OpenCSVを使用してCSVファイルを読み込み、データを表示する方法を示しています。

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

public class OpenCSVExample {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
String[] line;
while ((line = reader.readNext()) != null) {
String name = line[0];
String age = line[1];
String occupation = line[2];

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

このコードは、CSVファイルを読み込み、各レコードのフィールド値を取得して表示します。次のセクションでは、実際のコード例と解説を行います。

実際のコード例と解説

ここでは、CSVファイルを読み込む実際のコード例とその解説を行います。初心者でも理解しやすいように、基本的なコード例からエラーハンドリングの方法までを詳しく説明します。

基本的なCSV読み込みコード例

まずは、基本的なCSV読み込みコード例を紹介します。ここでは、Apache Commons CSVを使用した例を示します。

コード例

java
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

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

public class BasicCSVReader {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())) {
for (CSVRecord record : parser) {
String name = record.get(“名前”);
String age = record.get(“年齢”);
String occupation = record.get(“職業”);

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

解説

  1. ライブラリのインポート
  2. CSVFormat, CSVParser, CSVRecordはApache Commons CSVのクラスです。
  3. ファイルの読み込み
  4. new FileReader(csvFile)で指定されたパスのCSVファイルを読み込みます。
  5. CSVパーサーの作成
  6. new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())でCSVパーサーを作成し、ヘッダー行を認識します。
  7. レコードの処理
  8. for (CSVRecord record : parser)ループで各レコードを処理し、フィールドの値を取得します。
  9. エラーハンドリング
  10. try-catchブロックでIO例外をキャッチし、エラーが発生した場合にスタックトレースを出力します。

エラーハンドリングの方法

CSVファイルを読み込む際には、様々なエラーが発生する可能性があります。ここでは、よくあるエラーとその対処方法について説明します。

  1. ファイルが見つからないエラー
  2. ファイルパスが間違っている場合に発生します。ファイルパスを再確認し、存在することを確認します。
  3. データフォーマットエラー
  4. CSVファイルの形式が正しくない場合に発生します。例えば、カンマの数が一致しない場合や、エスケープ文字が正しく処理されていない場合です。

コード例

java
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class CSVReaderWithErrorHandling {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

if (!Files.exists(Paths.get(csvFile))) {
System.err.println(“ファイルが見つかりません: ” + csvFile);
return;
}

try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())) {
for (CSVRecord record : parser) {
try {
String name = record.get(“名前”);
String age = record.get(“年齢”);
String occupation = record.get(“職業”);

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
} catch (Exception e) {
System.err.println(“データフォーマットエラー: ” + record);
e.printStackTrace();
}
}
} catch (IOException e) {
System.err.println(“読み込みエラーが発生しました: ” + e.getMessage());
e.printStackTrace();
}
}
}

解説

  1. ファイルの存在確認
  2. Files.exists(Paths.get(csvFile))でファイルの存在を確認し、存在しない場合はエラーメッセージを表示して終了します。
  3. レコード処理内のエラーハンドリング
  4. 各レコードの処理中に例外が発生した場合、そのレコードに対するエラーメッセージを表示し、スタックトレースを出力します。

よくあるエラーと対処法

CSVファイルを読み込む際には、いくつかの一般的なエラーが発生する可能性があります。ここでは、それらのエラーの原因と対処法について説明します。

ファイルが見つからないエラー

ファイルが見つからないエラーは、指定されたパスにファイルが存在しない場合に発生します。このエラーは、次のような原因で発生することが多いです。

  • ファイルパスが間違っている
  • ファイルが削除されている
  • ファイルのアクセス権限が不足している

対処法

  1. ファイルパスの確認
  2. 指定されたパスが正しいか確認します。絶対パスまたは相対パスを適切に使用してください。
  3. ファイルの存在確認
  4. プログラムの実行前に、ファイルが存在することを手動で確認します。
  5. アクセス権限の確認
  6. ファイルに対する読み取り権限があるか確認します。

コード例

java
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class FileNotFoundErrorExample {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

if (!Files.exists(Paths.get(csvFile))) {
System.err.println(“ファイルが見つかりません: ” + csvFile);
return;
}

// ファイルが存在する場合の処理
try {
// CSV読み込み処理
} catch (IOException e) {
e.printStackTrace();
}
}
}

このコードでは、Files.exists()を使用してファイルの存在を確認し、存在しない場合はエラーメッセージを表示して処理を中断します。

データフォーマットエラー

データフォーマットエラーは、CSVファイルの形式が期待したものと異なる場合に発生します。たとえば、カンマの数が一致しない行や、エスケープ文字が正しく処理されていない行がある場合です。

対処法

  1. CSVファイルの検証
  2. 手動でCSVファイルを確認し、不整合がないかチェックします。
  3. エラーハンドリングの追加
  4. CSVレコードを処理する際に、データフォーマットエラーをキャッチし、適切に対処します。

コード例

java
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

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

public class DataFormatErrorExample {
public static void main(String[] args) {
String csvFile = “path/to/your/csvfile.csv”;

try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT.withHeader())) {
for (CSVRecord record : parser) {
try {
String name = record.get(“名前”);
String age = record.get(“年齢”);
String occupation = record.get(“職業”);

System.out.println(“名前: ” + name);
System.out.println(“年齢: ” + age);
System.out.println(“職業: ” + occupation);
} catch (Exception e) {
System.err.println(“データフォーマットエラー: ” + record);
e.printStackTrace();
}
}
} catch (IOException e) {
System.err.println(“読み込みエラーが発生しました: ” + e.getMessage());
e.printStackTrace();
}
}
}

このコードでは、各レコードを処理する際に例外が発生した場合、そのレコードに対するエラーメッセージを表示し、スタックトレースを出力します。

まとめ

本記事では、Javaを使用してCSVファイルを読み込む方法について詳細に説明しました。まず、CSVファイルの基本構造と用途について理解し、その後、JavaでCSVファイルを読み込むための準備を行いました。

さらに、Apache Commons CSVおよびOpenCSVといったオープンソースライブラリを活用して、CSVファイルを効率的に読み込む方法を具体的なコード例を交えながら紹介しました。また、CSV読み込み時に発生しがちなエラーとその対処法についても解説しました。

投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。