JavaでCSVファイルをList<List<String>>で返却する

このプログラムでは、指定したファイルパスにあるCSVファイルを読み込んで、List<List<String>>形式のオブジェクトに変換する方法を説明します。Java標準ライブラリを用いた実装で、BufferedReaderを使用してファイルを1行ずつ読み込み、カンマ区切りで分割してList<List<String>>に詰め替えます。

以下に完全なサンプルコードを示します:


サンプルコード:CSVファイルをList<List<String>>形式に変換

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CsvToList {
    public static void main(String[] args) {
        // CSVファイルのパスを指定
        String filePath = "example.csv"; // 必要に応じてファイルパスを変更してください

        // CSVファイルを読み込んでList<List<String>>形式に変換
        List<List<String>> data = readCsvToList(filePath);

        // 結果を出力
        System.out.println("CSVファイルの内容をList<List<String>>形式で出力:");
        for (List<String> row : data) {
            System.out.println(row);
        }
    }

    /**
     * 指定したCSVファイルを読み込んでList<List<String>>形式に変換するメソッド
     *
     * @param filePath CSVファイルのパス
     * @return List<List<String>>形式のデータ
     */
    public static List<List<String>> readCsvToList(String filePath) {
        List<List<String>> result = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            // 1行ずつ読み込み
            while ((line = br.readLine()) != null) {
                // カンマ区切りで分割してList<String>に変換
                List<String> row = Arrays.asList(line.split(","));
                result.add(row);
            }
        } catch (IOException e) {
            System.err.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
        }

        return result;
    }
}

コードの説明

  1. ファイルパスの指定:
  • filePath変数に読み込みたいCSVファイルのパスを指定します。
  • 相対パスでも絶対パスでも利用可能です。
  1. ファイルの読み込み:
  • BufferedReaderを使用してファイルを1行ずつ読み込みます。
  • .readLine()を使って1行ずつ処理し、nullになるまで繰り返します。
  1. カンマ区切りで分割:
  • 各行の文字列をString.split(",")を使ってカンマ区切りで分割します。
  • 分割された文字列をArrays.asList()List<String>に変換します。
  1. List>にデータを追加:
  • 各行のデータをresultList<List<String>>)に追加していきます。
  1. 例外処理:
  • ファイルの読み込みが失敗した場合にはIOExceptionをキャッチし、エラーメッセージを出力します。

実行例

CSVファイル内容 (example.csv):

名前,年齢,職業
山田太郎,30,エンジニア
鈴木一郎,25,デザイナー
佐藤花子,28,マネージャー

実行結果:

CSVファイルの内容をList<List<String>>形式で出力:
[名前, 年齢, 職業]
[山田太郎, 30, エンジニア]
[鈴木一郎, 25, デザイナー]
[佐藤花子, 28, マネージャー]

応用:カスタマイズ可能な処理

  • 文字コードの指定:
    デフォルトでは、システムのデフォルト文字コードが使用されます。特定の文字コードを使用したい場合は以下のように変更できます。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));

注意点

  1. エラーハンドリング:
  • ファイルが存在しない場合や読み込めない場合には適切なエラーメッセージを表示します。
  1. 空白の除去:
  • 読み込んだ値に不要な空白が含まれる場合があります。空白を除去したい場合は以下のように処理を追加します:
List<String> row = Arrays.asList(line.split(","));
row.replaceAll(String::trim); // 各要素の空白を削除
result.add(row);
  1. カンマ区切り文字内に改行やダブルクォートが含まれる場合:
  • このコードはシンプルな形式のCSVに適しており、複雑なCSV(例: ダブルクォートで囲まれたフィールドや、フィールド内にカンマが含まれるもの)には対応していません。
  • より厳密にCSVファイルを解析したい場合は、以下の外部ライブラリ(例: OpenCSV)を検討してください。

外部ライブラリを活用する場合

以下は外部ライブラリOpenCSVを使用してCSVを読み込む例です:

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CsvToListWithOpenCsv {
    public static void main(String[] args) throws IOException {
        String filePath = "example.csv";
        List<List<String>> data = new ArrayList<>();

        try (CSVReader reader = new CSVReader(new FileReader(filePath))) {
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                data.add(Arrays.asList(nextLine));
            }
        }

        // 結果表示
        System.out.println(data);
    }
}

これで、CSVファイルをList<List<String>>形式に変換する基本コードと応用例が説明されました! ご質問や改善点があればぜひお聞かせください。

コメント

タイトルとURLをコピーしました