Java

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

2021年5月16日

はじめに

JavaでCSVファイルの読み込みを行うには、Java標準で提供されているAPIを使うか、CSVファイルを扱うためのライブラリを使うかのどちらかです。

本記事では、Java標準で提供されているAPIを使いCSVファイルを読み込む方法について紹介しています。

また、読み込むCSVファイルの内容は次のとおりとします。

[sample.csv]

No,名前,年齢,住所
1,山田一郎,30,東京都渋谷区
2,佐藤二郎,25,大阪府大阪市
3,鈴木三郎,22,神奈川県横浜市
4,高橋四郎,18,北海道札幌市
5,斉藤五郎,16,愛知県名古屋市

スポンサーリンク

CSVファイルの読み込み

FilesクラスでCSVファイル読み込み

「Files」クラスのstaticメソッド「readAllLines」を使うことで、簡単にファイルの内容を読み込めます。

「Files.readAllLines」の第2引数には、文字コードを指定できます。今回の例では、文字コードに「UTF-8」を指定しています。

[Filesの例]

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class CsvReadSample {

    public static void main(String[] args) {
        Path path = Paths.get("C:\\work\\sample.csv");

        try {
            // CSVファイルの読み込み
            List<String> lines = Files.readAllLines(path, Charset.forName("UTF-8"));

            for (int i = 1; i < lines.size(); i++) {
                String[] data = lines.get(i).split(",");

                if (data.length > 3) {
                    // 読み込んだCSVファイルの内容を出力
                    System.out.print(data[0] + ",");
                    System.out.print(data[1] + ",");
                    System.out.print(data[2] + ",");
                    System.out.println(data[3]);
                }
            }
        } catch (IOException e) {
            System.out.println("ファイル読み込みに失敗");
        }
    }
}

[実行結果]

1,山田一郎,30,東京都渋谷区
2,佐藤二郎,25,大阪府大阪市
3,鈴木三郎,22,神奈川県横浜市
4,高橋四郎,18,北海道札幌市
5,斉藤五郎,16,愛知県名古屋市
ライブラリを使わなくても簡単にCSVファイルの内容を読み込むことができました。処理の流れは次のとおりです。

処理の流れ

  • Files.readAllLinesでCSVファイルを読み込む → StringのListに代入
  • 1で取得したListのサイズ分、2、3の処理を繰り返す(※ヘッダは読み込まないので、for文の開始を「i = 1」としている)
  • Stringの「split」メソッドでカンマ区切りの文字列を分割 → Stringの配列に代入
  • System.out.printでString配列に代入された値を出力

スポンサーリンク

BufferedReaderでCSVファイル読み込み

「BufferedReader」クラスを使うことで、CSVファイルの内容を1行ずつ読み込めます。

また「InputStreamReader」クラスを使うことで、文字コードを指定できます。今回の例では、文字コードに「UTF-8」を指定しています。

[BufferedReaderの例]

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class CsvReadStreamSample {

    public static void main(String[] args) {

        // CSVファイルの読み込み
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(
                new FileInputStream("C:\\work\\sample.csv"), Charset.forName("UTF-8")))) {

            String line;
            int index = 0;
            while ((line = reader.readLine()) != null) {
                if (index > 0) {
                    String[] data = line.split(",");

                    if (data.length > 3) {
                        // 読み込んだCSVファイルの内容を出力
                        System.out.print(data[0] + ",");
                        System.out.print(data[1] + ",");
                        System.out.print(data[2] + ",");
                        System.out.println(data[3]);
                    }
                }
                index++;
            }

        } catch (IOException e) {
            System.out.println("ファイル読み込みに失敗");
        }
    }
}

[実行結果]

1,山田一郎,30,東京都渋谷区
2,佐藤二郎,25,大阪府大阪市
3,鈴木三郎,22,神奈川県横浜市
4,高橋四郎,18,北海道札幌市
5,斉藤五郎,16,愛知県名古屋市
上記の例では、close漏れがないように「try-with-resources」を使用しています。(※try-with-resources文は、処理の終わりで各リソースを確実に閉じてくれる)

処理の流れは次のとおりです。

処理の流れ

  • BufferedReader.readLineでCSVファイルの行を1行ずつ読み込む
  • 「if (index > 0)」の条件に一致する場合、2、3の処理を行う(※ヘッダは読み込まない)
  • Stringの「split」メソッドでカンマ区切りの文字列を分割 → Stringの配列に代入
  • System.out.printでString配列に代入された値を出力

helpful