このプログラムでは、指定したファイルパスにある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;
}
}
コードの説明
- ファイルパスの指定:
filePath変数に読み込みたいCSVファイルのパスを指定します。- 相対パスでも絶対パスでも利用可能です。
- ファイルの読み込み:
BufferedReaderを使用してファイルを1行ずつ読み込みます。.readLine()を使って1行ずつ処理し、nullになるまで繰り返します。
- カンマ区切りで分割:
- 各行の文字列を
String.split(",")を使ってカンマ区切りで分割します。 - 分割された文字列を
Arrays.asList()でList<String>に変換します。
- List>にデータを追加:
- 各行のデータを
result(List<List<String>>)に追加していきます。
- 例外処理:
- ファイルの読み込みが失敗した場合には
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"));
注意点
- エラーハンドリング:
- ファイルが存在しない場合や読み込めない場合には適切なエラーメッセージを表示します。
- 空白の除去:
- 読み込んだ値に不要な空白が含まれる場合があります。空白を除去したい場合は以下のように処理を追加します:
List<String> row = Arrays.asList(line.split(","));
row.replaceAll(String::trim); // 各要素の空白を削除
result.add(row);
- カンマ区切り文字内に改行やダブルクォートが含まれる場合:
- このコードはシンプルな形式の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>>形式に変換する基本コードと応用例が説明されました! ご質問や改善点があればぜひお聞かせください。

コメント