公式ドキュメント
http://opencsv.sourceforge.net/
JavaDoc
http://opencsv.sourceforge.net/apidocs/index.html
読取内容をBeanのListにする
基本形
List<SampleBean> list = null;
// ファイルを読み取る
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"))) {
CsvToBeanBuilder<SampleBean> builder = new CsvToBeanBuilder<SampleBean>(reader);
builder.withType(SampleBean.class);
list = builder.build().parse();
}
タブ区切りテキストを読み取る
builderに追加する記述
builder.withSeparator('\t');
ヘッダー行がある場合
Beanのプロパティに@CsvBindByName
を付ける。列名による指定。
ヘッダー行が無い場合
public class SampleBean {
@CsvBindByName
private String col1 = null;
@CsvBindByName
private String col2 = null;
@CsvBindByName
private String col3 = null;
@CsvBindByName
private String col4 = null;
@CsvBindByName
private String col5 = null;
// 略
}
ヘッダー行が無い場合
Beanのプロパティに@CsvBindByPosition
を付ける。列位置による指定。
ヘッダー行が無い場合
public class SampleBean {
@CsvBindByPosition(position = 0)
private String col1 = null;
@CsvBindByPosition(position = 1)
private String col2 = null;
@CsvBindByPosition(position = 2)
private String col3 = null;
@CsvBindByPosition(position = 3)
private String col4 = null;
@CsvBindByPosition(position = 4)
private String col5 = null;
// 略
}
ファイルへ書込み
Beanのリストから書込み
公式サイトのサンプル
Writer writer = new FileWriter("yourfile.csv");
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(beans);
writer.close();
公式サンプルのやり方では、以下の挙動をする。
・ヘッダー行が挿入されるが、英字が全て大文字になる。
・列の出力順が、列名の昇順になる。
いずれもStrategyなどを使えば制御できるかと思ったが、独自Strategyクラスを作らなくてはいけなかったりする。なので、単純にCSVWriter
を使って書き込む方が手っ取り早そう。
CSVWriterを使って書込み
CSVWriterを使うサンプル
CSVWriterBuilder builder = new CSVWriterBuilder(writer);
builder.withSeparator('\t'); // タブ区切り
builder.withLineEnd("\r\n"); // 改行コード(デフォルトだと\nになる)
try (ICSVWriter csvWriter = builder.build()) {
// ヘッダー
csvWriter.writeNext(new String[] { "column1", "column2" }, false);
// 内容の書込み
for (SampleBean output : outputList) {
csvWriter.writeNext(new String[] { output.getColumn1(), output.getColumn2() }, false);
}
}