Top / 自作ツール / opencsvPlus

Java/CSVを取り扱う のページでopencsv - an open source csv parser for Java という非常にcoolなCSVライブラリを取り上げたのですが、いくつか欲しい機能がなかったようなので、追加で作ってみました。

追加で作った機能は、

  • CSVデータとJavaBeans?のフィールドを設定ファイルでマッピングして、自動的にJavaBeans?のインスタンスを生成してくれる機能
  • CSVへ出力するときにフィールドをどの順番で出力するか指定する機能

程度ですが。

CSVデータからJavaBeans?を生成する機能ですが、元のライブラリでもプログラム上でマッピングを指定する事はできるんですが、マッピングを設定ファイルで指定できるように機能追加しています。

データをCSV出力するときにフィールドをどの順番で出力するか指定する機能 については、元のライブラリもList<String[]>をCSV整形して出力する事はできるのですが、JavaBeans?を直接CSV出力する機能を追加しています。

ダウンロード

ライブラリを取得するだけなら、 opencsvPlus.jar をダウンロードしてください。サンプルも含めて下記のサイトよりEclipseプロジェクトをダウンロードするのがわかりやすいと思います。

インストール

基本的に http://www.masatom.in/viewvc/trunk/opencsvPlus/?root=Others をダウンロードしてEclipseにimportすればセットアップは完了ですね。自分のプロジェクトや他の環境で使用する場合は、このプロジェクト内にも同梱されてますが

  • opencsv-1.8.jar
  • commons関連

などへもパスを通してください。

使い方

CSVデータとJavaBeans?のフィールドを設定ファイルでマッピングする機能

public class HeaderColumnNameAutoTranslateSample03 {
  private static final String CSV_FILE = "sample.csv";

  public static void main(String[] args) throws IOException {
    HeaderColumnNameAutoTranslateMappingStrategy strat = new HeaderColumnNameAutoTranslateMappingStrategy();
    // FileInputStream in = new FileInputStream(new File("hogehoge.txt"));
    // strat.setInputStream(in);
    strat.setType(CSVSampleBean.class);
    CsvToBean csv = new CsvToBean();
    List<CSVSampleBean> list = csv.parse(strat, new FileReader(CSV_FILE));
    for (CSVSampleBean bean : list) {
      System.out.println(bean);
    }
  }
}

詳細は、プログラム中でなく、設定ファイルとかでマッピングを指定したいに書きました。、

CSVへ出力するときにフィールドをどの順番で出力するか指定する機能

public class CSVWriterSample04 {
  private static final String CSV_FILE = "sampleOut.csv";

  public static void main(String[] args) throws IOException {
    HeaderColumnNameAutoTranslateMappingStrategy strat = new HeaderColumnNameAutoTranslateMappingStrategy();
    // FileInputStream in = new FileInputStream(new File("hogehoge.txt"));
    // strat.setInputStream(in);
    strat.setType(CSVSampleBean.class);
    BeanToCsv csv = new BeanToCsv();
    List<CSVSampleBean> list = getList();
    // カンマ区切りで、""で囲まない、ばあい。
    csv.writeAll(strat, new CSVWriter(new FileWriter(CSV_FILE), ',',
        '\u0000'), list);
  }

  public static List<CSVSampleBean> getList() {
    try {
      HeaderColumnNameAutoTranslateMappingStrategy strat = new HeaderColumnNameAutoTranslateMappingStrategy();
      strat.setType(CSVSampleBean.class);
      CsvToBean csv = new CsvToBean();
      List<CSVSampleBean> list = csv.parse(strat, new FileReader(
          "sample.csv"));
      return list;
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    return null;
  }
}

上記の

BeanToCsv csv = new BeanToCsv();
csv.writeAll(strat, new CSVWriter(new FileWriter(CSV_FILE), ',',
        '\u0000'), list);

このように、BeanToCsv?クラスを用いて、JavaBeans?をCSV出力する事ができます。フィールドのどれをどの順番で出力するかの設定は、先の設定ファイル*1

姓=last_name
名=first_name
年齢=age

を用いることができます。上記のように設定すれば、上の順番で、ヘッダが左辺の日本語でCSV出力されます。ようするに出力されるCSVはこんな感じ。

姓,名,年齢
とうきょう,たろう,33
東京,太郎,15

この記事は

選択肢 投票
おもしろかった 7  
そうでもない 2  

Top / 自作ツール / opencsvPlus

現在のアクセス:8003


*1 該当のJavaBeans?と同じディレクトリに[Bean名].txtって名前で置いておく

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-01 (水) 14:42:23 (17d)