はじめに
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
この記事は役に立ちましたか?