データをCSVファイルにエクスポートする方法– Java

Comma-Separated Values (CSV)ファイルは通常のプレーンテキストファイルであり、データを列ごとに格納し、区切り文字(コンマ)で分割します。
Note
CSVファイルの作成は、通常のテキストファイルの作成と同じですが、以前のCSV parsing
exampleで言及した「二重引用符」の問題に注意してください。
このチュートリアルでは、データやオブジェクトをCVSファイルに簡単に書き込むための単純なCVSUtilsクラスを紹介します。
1. CSV書き込みの例
1.1 Review the following CVSUtils class, it supports custom separator, custom enclose quote (default is empty), escaped the double-quotes with another double quote (RFC4180)
CSVUtils.java
package com.example.utils;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
public class CSVUtils {
private static final char DEFAULT_SEPARATOR = ',';
public static void writeLine(Writer w, List values) throws IOException {
writeLine(w, values, DEFAULT_SEPARATOR, ' ');
}
public static void writeLine(Writer w, List values, char separators) throws IOException {
writeLine(w, values, separators, ' ');
}
//https://tools.ietf.org/html/rfc4180
private static String followCVSformat(String value) {
String result = value;
if (result.contains("\"")) {
result = result.replace("\"", "\"\"");
}
return result;
}
public static void writeLine(Writer w, List values, char separators, char customQuote) throws IOException {
boolean first = true;
//default customQuote is empty
if (separators == ' ') {
separators = DEFAULT_SEPARATOR;
}
StringBuilder sb = new StringBuilder();
for (String value : values) {
if (!first) {
sb.append(separators);
}
if (customQuote == ' ') {
sb.append(followCVSformat(value));
} else {
sb.append(customQuote).append(followCVSformat(value)).append(customQuote);
}
first = false;
}
sb.append("\n");
w.append(sb.toString());
}
}
1.2 Example to show the CSVUtils usage.
CSVUtils.java
package com.example.utils;
import java.io.FileWriter;
import java.util.Arrays;
public class CVSUtilExample {
public static void main(String[] args) throws Exception {
String csvFile = "/Users/example/csv/abc.csv";
FileWriter writer = new FileWriter(csvFile);
CSVUtils.writeLine(writer, Arrays.asList("a", "b", "c", "d"));
//custom separator + quote
CSVUtils.writeLine(writer, Arrays.asList("aaa", "bb,b", "cc,c"), ',', '"');
//custom separator + quote
CSVUtils.writeLine(writer, Arrays.asList("aaa", "bbb", "cc,c"), '|', '\'');
//double-quotes
CSVUtils.writeLine(writer, Arrays.asList("aaa", "bbb", "cc\"c"));
writer.flush();
writer.close();
}
}
出力
/Users/example/csv/abc.csv
a,b,c,d "aaa","bb,b","cc,c" 'aaa'|'bbb'|'cc,c' aaa,bbb,cc""c
2. より多くの例
別の例を見てみましょう。オブジェクトのリストを作成し、CSVファイルに書き込みます。
2.1 A Developer class.
Developer.java
package com.example.csv;
import java.math.BigDecimal;
public class Developer {
private String name;
private BigDecimal salary;
private int age;
public Developer(String name, BigDecimal salary, int age) {
this.name = name;
this.salary = salary;
this.age = age;
}
//...
}
2.2 Example.
CVSUtilExample.java
package com.example.utils;
import com.example.java8.Developer;
import java.io.FileWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CVSUtilExample {
public static void main(String[] args) throws Exception {
String csvFile = "/Users/example/csv/developer.csv";
FileWriter writer = new FileWriter(csvFile);
List developers = Arrays.asList(
new Developer("example", new BigDecimal(120500), 32),
new Developer("zilap", new BigDecimal(150099), 5),
new Developer("ultraman", new BigDecimal(99999), 99)
);
//for header
CSVUtils.writeLine(writer, Arrays.asList("Name", "Salary", "Age"));
for (Developer d : developers) {
List list = new ArrayList<>();
list.add(d.getName());
list.add(d.getSalary().toString());
list.add(String.valueOf(d.getAge()));
CSVUtils.writeLine(writer, list);
//try custom separator and quote.
//CSVUtils.writeLine(writer, list, '|', '\"');
}
writer.flush();
writer.close();
}
}
出力
/Users/example/csv/developer.csv
Name,Salary,Age example,120500,32 zilap,150099,5 ultraman,99999,99
Note
それでも自分で実装することに不安がある場合は、このサードパーティのCSVライブラリ–OpenCSVを試してください。
完了しました。