javaのCSV読み取りをするSuperCSV
スポンサーリンク
CSV読み取りがしたかったので,ライブラリを探しました. supercsvがいいみたいです.
ダウンロード
Super CSV - Downloading Super CSV
上のページから
You can download the latest distribution zip file from SourceForge, which contains:
のところのSourceForge
のリンクから.
早速書いたコード
リードとライトのメソッドを書きました.CSVを読み込んでString型二次元リストに して返します.
read
ポイント.
リーダーの定義.CsvPreference
は区切り文字を指定するクラス.あまり深くは知りません.
ICsvListReader reader = new CsvListReader( new FileReader(name), CsvPreference.EXCEL_PREFERENCE);
ループして一行ずつ読み取ります.read()
メソッドを使用.簡単ですね.
while (temp = reader.read())
write
ライタの定義.
ICsvListWriter writer = new CsvListWriter(new FileWriter(name), CsvPreference.EXCEL_PREFERENCE);
ヘッダを書き込みます.
writer.writeHeader(header);
データの書き込み.row
はList<String>
型.write()
メソッドで一行ずつ要素を書き込みます.
writer.write(row);
今回書いてみたソース
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.supercsv.io.CsvListReader; import org.supercsv.io.CsvListWriter; import org.supercsv.io.ICsvListReader; import org.supercsv.io.ICsvListWriter; import org.supercsv.prefs.CsvPreference; public class SuperCsvHandler { /** * 読み込みメソッド. * * @param name * ファイル名 * @return CSVファイルの二次元リスト */ public static List<List<String>> read(String name) { List<List<String>> list = null; try { ICsvListReader reader = new CsvListReader(new FileReader(name), CsvPreference.EXCEL_PREFERENCE); list = new ArrayList<List<String>>(); List<String> temp = null; // 読み込み while ((temp = reader.read()) != null) { list.add(new ArrayList<String>(temp)); } reader.close(); } catch (Exception e) { e.printStackTrace(); } return list; } /** * 書き込みメソッド. * * @param name * ファイル名 */ public static void write(String name) { try { ICsvListWriter writer = new CsvListWriter(new FileWriter(name), CsvPreference.EXCEL_PREFERENCE); String[] header = { "nc", "nc", "nc", "nc", "nc" }; // ヘッダを適当に定義 // ヘッダ書き込み writer.writeHeader(header); // 書き込み for (int i = 0; i < 1000000; i++) { List<String> row = new ArrayList<String>(); for (int j = 0; j < 5; j++) { row.add("data" + i); } writer.write(row); } writer.close(); } catch (IOException e) { e.printStackTrace(); } } }