スポンサーリンク
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ループから抜けて読み込みを終了します。
ひとこと
公式サイトでもある程度単純な例を紹介しているのですが、それでも解釈が面倒だったので、今回は余計なものを片っ端から取り除いた形にしてみました。
特別な機能はさっぱり使えない例ですが、最低限これさえできれば、他の機能を試すとっかかりにもなると思います。その「他の機能」については公式サイトを覗いてみてください。
スポンサーリンク
スポンサーリンク