CSVファイルを配列に読み込む

1.概要

簡単に言うと、CSV(Comma Separated Values)ファイルには、コンマ区切り文字で区切られた編成情報が含まれています。

このチュートリアルでは、CSVファイルを配列に読み込むさまざまな方法について説明します。

2. java.i BufferedReader

まず、 BufferedReader readLine() を使用してレコードを1行ずつ読み取ります。次に、カンマ区切り文字に基づいて行をトークンに分割します。

List<List<String>> records = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("book.csv"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[]values = line.split(COMMA__DELIMITER);
        records.add(Arrays.asList(values));
    }
}
  • このアプローチでは、より洗練されたCSV(値を引用符で囲む、または値としてカンマを含めるなど)は意図したとおりに解析されません。

3. java.utilのスキャナ

次に、 java.util.Scanner を使用してファイルの内容を調べ、1行ずつ順番に取得します。

List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("book.csv"));) {
    while (scanner.hasNextLine()) {
        records.add(getRecordFromLine(scanner.nextLine()));
    }
}

それから行を解析してそれを配列に格納します。

private List<String> getRecordFromLine(String line) {
    List<String> values = new ArrayList<String>();
    try (Scanner rowScanner = new Scanner(line)) {
        rowScanner.useDelimiter(COMMA__DELIMITER);
        while (rowScanner.hasNext()) {
            values.add(rowScanner.next());
        }
    }
    return values;
}

これまでと同様に、この方法では、より洗練されたCSVは意図したとおりに解析されません。

4. OpenCSV

より複雑なCSVファイルをOpenCSVで扱うことができます。

  • OpenCSVは、CSVファイルを扱うためのAPIを提供するサードパーティのライブラリです。** ファイル内のレコードを読み取るには、 CSVReader readNext() メソッドを使用します。

List<List<String>> records = new ArrayList<List<String>>();
try (CSVReader csvReader = new CSVReader(new FileReader("book.csv"));) {
    String[]values = null;
    while ((values = csvReader.readNext()) != null) {
        records.add(Arrays.asList(values));
    }
}

OpenCSVについてもっと深く掘り下げて学ぶには、https://www.baeldung.com/opencsv[OpenCSV tutorial]をチェックしてください。

5.まとめ

このクイックチュートリアルでは、CSVファイルを配列に読み込むためのさまざまな方法を調べました。

いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-io[GitHubで利用可能]です。