解説動画
今回は、Apache Commons CSVを使って、CSVファイルの読み取り・検証をします。
CSVはエスケープ処理が面倒ですよね。
Apache Commons CSVを使うと、簡単です。
■動画はこちら
■Youtube版の解説で使用しているソースコード
動画と一緒にこちらも参考にどうぞ。
pom.xml
1 2 3 4 5 6 | <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.10.0</version> </dependency> |
サンプルプログラム1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package csv; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; public class CsvTest1 { public static void main(String[] args) { //CSVファイルのパスとエンコーディング File file = new File("C:\\work\\data1.csv"); Charset charset = Charset.forName("SJIS"); //CSVファイル読み込み try(CSVParser parser = CSVParser.parse(file, charset, CSVFormat.DEFAULT);) { //全レコードをまとめてリストで取得 List<CSVRecord> recList = parser.getRecords(); //リストから出力 for (CSVRecord rec : recList) { //CSVの項目を読み込む String col1 = null; String col2 = null; String col3 = null; String col4 = null; if(rec.size()==4) { col1 = rec.get(0); col2 = rec.get(1); col3 = rec.get(2); col4 = rec.get(3); } //読み取った項目を出力 System.out.println(col1 + " : " + col2 + " : " + col3 + " : " + col4); } } catch (IOException e) { e.printStackTrace(); } } } |
サンプルプログラム2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package csv; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; public class CsvTest2 { public static void main(String[] args) { //CSVファイルのパスとエンコーディング File file = new File("C:\\work\\data1.csv"); Charset charset = Charset.forName("SJIS"); //CSVファイル読み込み try(CSVParser parser = CSVParser.parse(file, charset, CSVFormat.DEFAULT);) { //CSVParserから1レコードずつ取得して、出力 for(CSVRecord rec : parser) { //CSVの項目を読み込む String col1 = null; String col2 = null; String col3 = null; String col4 = null; if(rec.size()==4) { col1 = rec.get(0); col2 = rec.get(1); col3 = rec.get(2); col4 = rec.get(3); } //読み取った項目を出力 System.out.println(col1 + " : " + col2 + " : " + col3 + " : " + col4); } } catch (IOException e) { e.printStackTrace(); } } } |
サンプルプログラム3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package csv; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.stream.Stream; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; public class CsvTest3 { public static void main(String[] args) { //CSVファイルのパスとエンコーディング File file = new File("C:\\work\\data1.csv"); Charset charset = Charset.forName("SJIS"); //CSVファイル読み込み try(CSVParser parser = CSVParser.parse(file, charset, CSVFormat.DEFAULT);) { //全レコードをまとめてストリームで取得 Stream<CSVRecord> stream = parser.stream(); //ストリームで処理 stream.forEach(rec -> { //CSVの項目を読み込む String col1 = null; String col2 = null; String col3 = null; String col4 = null; if(rec.size()==4) { col1 = rec.get(0); col2 = rec.get(1); col3 = rec.get(2); col4 = rec.get(3); } //読み取った項目を出力 System.out.println(col1 + " : " + col2 + " : " + col3 + " : " + col4); }); } catch (IOException e) { e.printStackTrace(); } } } |