情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Java:CSVライブラリ「Super CSV」を使ってCSVファイルを読み書きする方法メモ

Java (37)

JavaでCSVファイルを読み書きする方法をメモしておきます。例を見れば分かるくらい単純だと思います。ググってみると、自前で読み書きしたり(ただのカンマ区切りだったり)、Open CSVを使っていたりが目立ちますが、今回はSuper CSVというライブラリを使います。

※サンプルコードの例外処理部分、特に各catchの中は、エラー回避用でしかないので、実際は利用する状況に応じたコードを挿入してください。また、自分のコードから適宜抜き出したもので、抜き出す時にバグを入れてしまっているかも知れません。

SuperCSVの入手方法・利用方法

SuperCSVの公式サイトからダウンロードできますが、Mavenを使っていれば次の内容を追加するだけなので簡単。

<dependency>
    <groupId>net.sf.supercsv</groupId>
    <artifactId>super-csv</artifactId>
    <version>2.1.0</version>
</dependency>

書き込み

書き込みの方法だけでもいろいろあって、便利機能もあるのですが、特に単純な方法の場合を紹介します。

書き込みは、「行」ごとに行います。今回はひとつの「行」をあらかじめ「List<String>」として用意しておきます。サンプルはこちら。

ICsvListWriter listWriter = null;
try {
	listWriter = new CsvListWriter(new FileWriter("filename.csv"), CsvPreference.STANDARD_PREFERENCE);
	List<String> list = ...;
	listWriter.write(list);
} catch (IOException e) {
	throw new RuntimeException(e);
} finally {
	if (listWriter != null) {
		try {
			listWriter.close();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
}

実質、本体はtryの中の3行のみです。これだけで、List<String>の中身が、CSVファイルの1行目になります。

tryの中で「listWriter.write(...)」を繰り返す毎に、そのデータがCSVファイルの2行目、3行目になっていきます。

とても単純で分かりやすいと思います。

読み込み

単純な読み込みは、次のようにできます。次の例では、最初の行から最後の行までを順番にlistに読み込みます。

ICsvListReader listReader = null;
try {
	listReader = new CsvListReader(new FileReader("filename.csv"), CsvPreference.STANDARD_PREFERENCE);
	List<String> list = null;
	while ((list = listReader.read()) != null) {
		list...
	}
} catch (IOException e) {
	throw new RuntimeException(e);
} finally {
	if (listReader != null) {
		try {
			listReader.close();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
}

こちらもメインはtryの中です。

whileループの条件部分の「list = listReader.read()」で、CSVファイル1行分をList<String>型の変数listに読み込んでいます。各行(list)に対する処理は、whileの中で行います。

処理が最後の行に到達すると、listReader.read()はnullを返し、whileループから抜けて読み込みを終了します。

ひとこと

公式サイトでもある程度単純な例を紹介しているのですが、それでも解釈が面倒だったので、今回は余計なものを片っ端から取り除いた形にしてみました。

特別な機能はさっぱり使えない例ですが、最低限これさえできれば、他の機能を試すとっかかりにもなると思います。その「他の機能」については公式サイトを覗いてみてください。

コメント(0)

新しいコメントを投稿