// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

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

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

程度ですが。

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

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


***ダウンロード [#yc3efb89]
ライブラリを取得するだけなら、
[[opencsvPlus.jar>http://www.masatom.in/viewvc/trunk/opencsvPlus/lib/opencsvPlus.jar?root=Others&view=log]] 
をダウンロードしてください。サンプルも含めて下記のサイトよりEclipseプロジェクトをダウンロードするのがわかりやすいと思います。

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

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


**使い方 [#ja819a34]
***CSVデータとJavaBeansのフィールドを設定ファイルでマッピングする機能 [#k443b165]
 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);
     }
   }
 }

詳細は、[[プログラム中でなく、設定ファイルとかでマッピングを指定したい>Java/CSVを取り扱う#m27b240a]]に書きました。、

***CSVへ出力するときにフィールドをどの順番で出力するか指定する機能 [#sfdd774b]
 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出力する事ができます。フィールドのどれをどの順番で出力するかの設定は、先の設定ファイル((該当のJavaBeansと同じディレクトリに[Bean名].txtって名前で置いておく))
 姓=last_name
 名=first_name
 年齢=age
を用いることができます。上記のように設定すれば、上の順番で、ヘッダが左辺の日本語でCSV出力されます。ようするに出力されるCSVはこんな感じ。
 姓,名,年齢
 とうきょう,たろう,33
 東京,太郎,15


----
この記事は
#vote(おもしろかった[5],そうでもない[2])
#vote(おもしろかった[7],そうでもない[2])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS