Editionをインストールする。CSVを取り扱うCSVを読み込むJavaライブラリダウンロード使ってみる。仕事ではよくCSVファイルを読み込んで云々といった業務処理が結構必要になったりしますが、Javaのライブラリを探していたところ、よさげなライブラリが見つかりました。触ったところ非常にシンプルで使いやすかったのでメモっておきます。ダウンロード可能です。†Eclipseのプロジェクトとしてアップしました。http://www.masatom.in/viewvc/trunk/CSVReaderSamples/?root=Examplesよりダウンロード可能です。}}実行結果は以下の通り。etc...csvファイルをパースして、適切に分割してくれています。サンプルは単純でしたが、ダブルクォート("")で囲まれたCSVやタブ区切りのファイル、""内のカンマの取り扱い、途中に改行が入るCSV、たとえば姓,名,年齢とうきょう,"たろう",33東京,太郎,15こんなたち悪いCSVなども、正しく取り扱うことができます。†さて先のように、簡単にCSVをパースすることができましたが、このライブラリでとても便利なのは、CSVデータを指定したJavaBeans?に直接マッピングできるところです。}}にマッピングする事ができるんですね。指定するCSVの1行目はヘッダ行と見なして、1行目の文字列群と、JavaBeans?のフィールドを対応づけるなどいろいろな方法で対応付けを指定することができます。Mappingの指定は、sample.csv姓,名,年齢とうきょう,たろう,33東京,太郎,15...の「姓,名,年齢」とJavaBeans?のフィールド「last_name,first_name,age」をjava.util.Mapをつかって対応づける方法でやってみます。CSVのヘッダ名が、どのフィールドにマッピングすればいいかを指定する。この場合は、ヘッダ行が無視される。}}実行結果は以下の通りnu.mine.kino.csv.CSVSampleBean@833955[姓=とうきょう,名=たろう,年齢=33]nu.mine.kino.csv.CSVSampleBean@13582d[姓=東京,名=太郎,年齢=15]このようにマッピングを指定するだけで、自動的にJavaBeans?を生成しフィールドに値をセットしてくれます。reader);というように自分でCSVReaderを生成して渡すこともできます。<-セパレータをタブにしてるとして自分でCSVReaderを作成するばあいに使用します。†さてプログラム中にMapを用いてCSVヘッダ名とフィールド名を対応づけることで、JavaBeans?にCSVをマッピングすることができました。そのマッピングを外から指定できないかですが、どうも標準の機能ではできないっぽいです。コードを追加して、できるようにしました。au.com.bytecode.opencsv.bean.HeaderColumnNameAutoTranslateMappingStrategyというクラスを作成したのですが、このクラスは姓=last_name名=first_name年齢=ageというテキストファイル*1からマッピングを読み取り、そのマッピングにしたがってJavaBeans?のインスタンスを生成してくれます。具体的なコードは以下の通り。}}コメントアウトしてますが、設定ファイルはプログラムで指定することもできます。指定しない場合のデフォルト値は、JavaBeans?のクラスと同じディレクトリ上の[JavaBean?クラス名].txtです。†CSVの順番(何列目のデータ)とJavaBeans?のフィールドをマッピングすることで、JavaBeans?のインスタンスを生成する事もできます。ColumnPositionMappingStrategy?をつかえばOKです。CSVの順番で、どのフィールドにマッピングすればいいかを指定する。};//フィールド名strat.setColumnMapping(columns);どのフィールドにCSVのどの列のデータをマッピングするかを指定するって感じですね。