読者です 読者をやめる 読者になる 読者になる

うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

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

データの書き込み.rowList<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();
        }
    }
}