8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Java】OpenCSVでファイルの読み書き

Posted at

公式ドキュメント

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);
	}

}
8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?