解説動画
今回は、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 51 52 53 | package csv; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; public class CsvWriteTest1 { public static void main(String[] args) { //データの準備 List<List<String>> dataList = new ArrayList<>(); dataList.add(Arrays.asList("コード","都道府県","総面積","都道府県庁所在地")); dataList.add(Arrays.asList("1","北海道","83424","北海道札幌市")); dataList.add(Arrays.asList("2","青森県","9646","青森県青森市")); dataList.add(Arrays.asList("3","岩手県","15275","岩手県盛岡市")); dataList.add(Arrays.asList("4","宮城県","7282","宮城県仙台市")); dataList.add(Arrays.asList("5","秋田県","11638","秋田県秋田市")); //CSVフォーマット作成 CSVFormat csvFormat = CSVFormat.Builder .create(CSVFormat.DEFAULT) .build(); //CSVプリンタ(書き込み)を作成 try(FileOutputStream fos = new FileOutputStream("d:\\work\\output.csv"); OutputStreamWriter osw = new OutputStreamWriter(fos,"sjis"); BufferedWriter bw = new BufferedWriter(osw); CSVPrinter csvPrinter = new CSVPrinter(bw, csvFormat)) { //項目ごとにCSVを書き込み for(List<String> row : dataList) { for(String col : row) { //項目の書き込み csvPrinter.print(col); } //改行(次のレコード) csvPrinter.println(); } } 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 47 48 49 50 | package csv; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; public class CsvWriteTest2 { public static void main(String[] args) { //データの準備 List<List<String>> dataList = new ArrayList<>(); dataList.add(Arrays.asList("コード","都道府県","総面積","都道府県庁所在地")); dataList.add(Arrays.asList("1","北海道","83424","北海道札幌市")); dataList.add(Arrays.asList("2","青森県","9646","青森県青森市")); dataList.add(Arrays.asList("3","岩手県","15275","岩手県盛岡市")); dataList.add(Arrays.asList("4","宮城県","7282","宮城県仙台市")); dataList.add(Arrays.asList("5","秋田県","11638","秋田県秋田市")); //CSVフォーマット作成 CSVFormat csvFormat = CSVFormat.Builder .create(CSVFormat.DEFAULT) .build(); //CSVプリンタ(書き込み)を作成 try(FileOutputStream fos = new FileOutputStream("d:\\work\\output.csv"); OutputStreamWriter osw = new OutputStreamWriter(fos,"sjis"); BufferedWriter bw = new BufferedWriter(osw); CSVPrinter csvPrinter = new CSVPrinter(bw, csvFormat)) { //レコードごとにCSVを書き込み for(List<String> row : dataList) { //レコードの書き込み csvPrinter.printRecord(row); } } 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 | package csv; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; public class CsvWriteTest3 { public static void main(String[] args) { //データの準備 List<List<String>> dataList = new ArrayList<>(); dataList.add(Arrays.asList("コード","都道府県","総面積","都道府県庁所在地")); dataList.add(Arrays.asList("1","北海道","83424","北海道札幌市")); dataList.add(Arrays.asList("2","青森県","9646","青森県青森市")); dataList.add(Arrays.asList("3","岩手県","15275","岩手県盛岡市")); dataList.add(Arrays.asList("4","宮城県","7282","宮城県仙台市")); dataList.add(Arrays.asList("5","秋田県","11638","秋田県秋田市")); //CSVフォーマット作成 CSVFormat csvFormat = CSVFormat.Builder .create(CSVFormat.DEFAULT) .build(); //CSVプリンタ(書き込み)を作成 try(FileOutputStream fos = new FileOutputStream("d:\\work\\output.csv"); OutputStreamWriter osw = new OutputStreamWriter(fos,"sjis"); BufferedWriter bw = new BufferedWriter(osw); CSVPrinter csvPrinter = new CSVPrinter(bw, csvFormat)) { //レコード全体のストリームを書き込み csvPrinter.printRecords(dataList.stream()); } catch (IOException e) { e.printStackTrace(); } } } |