Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順

CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。

JavaでCSVファイルを読み込む仕組み

JavaでCSVファイルを読み込むには、BufferedReaderクラスreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。

読み取った各行に対してsplit()メソッドでカンマ文字を基準に分割処理を行えば、行内の各項目を配列として取得できます。あとは配列をループで反復処理するか、インデックスを指定することで、各項目に簡単にアクセスできるようになります。

処理の流れ

1. FileクラスとFileReaderクラスで対象のCSVファイルを開く
2. BufferedReaderでファイルをラップし、バッファリングしながら読み込む
3. readLine()で1行ずつ取得する
4. split("\,")でカンマ区切りに分割し、配列に格納する
5. 配列の内容を出力または加工する

サンプルCSVファイル

今回は以下のような内容のCSVファイル(Technology.csv)を例にします。

"JAVA","PYTHON","JAVASCRIPT","SELENIUM","SCALA"

コード例

以下は、CSVファイルを読み込んで内容をコンソールに出力するサンプルプログラムです。

import java.io.*;
public class CSVReaderTest {
    public static final String delimiter = ",";

    public static void read(String csvFile) {
        try {
            File file = new File(csvFile);
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            String line = "";
            String[] tempArr;

            while((line = br.readLine()) != null) {
                tempArr = line.split(delimiter);
                for(String tempStr : tempArr) {
                    System.out.print(tempStr + " ");
                }
                System.out.println();
            }
            br.close();
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 読み込むCSVファイルのパス
        String csvFile = "C:/Temp/Technology.csv";
        CSVReaderTest.read(csvFile);
    }
}

コードのポイント

・delimiter定数にカンマ「,」を設定し、split()の区切り文字として使用しています。
・while文の中でreadLine()を呼び出し、戻り値がnullになる(ファイルの終端に達する)まで繰り返し処理を行います。
・IOExceptionをcatchして、ファイルが存在しない場合などの入出力エラーに対応しています。

実行結果

"JAVA" "PYTHON" "JAVASCRIPT" "SELENIUM" "SCALA"

このように、CSVファイルの各項目がスペース区切りで正しく出力されました。

補足:より安全な書き方(try-with-resources)

上記のコードではbr.close()を明示的に呼び出していますが、例外発生時にリソースが閉じられない可能性があります。Java 7以降ではtry-with-resources構文を使うことで、自動的にリソースをクローズでき、より安全で簡潔なコードになります。また、日本語を含むCSVファイルを扱う場合は、FileInputStreamとInputStreamReaderを組み合わせて文字エンコーディング(例:UTF-8やShift_JIS)を明示的に指定すると、文字化けを防げます。

  1. Javaでフォルダ内のディレクトリ(フォルダ)のみを取得する方法

    Javaで特定のフォルダに含まれるファイルではなく、ディレクトリ(サブフォルダ)だけを取得したいケースはよくあります。本記事では、代表的な2つの方法——FileFilterインターフェースを使う方法と、NIOのFiles.walk()を使う方法——をサンプルコード付きで解説します。listFiles()メソッドとFileFilterの基本FileクラスのlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名を、配列として返します。ここで活躍するのがFileFilterインターフェースです。FileFilterはパス名をフィル

  2. Javaでプロパティファイルからデータを読み取る方法を解説

    JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー