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

いつブロ

いつまで続くか分からないブログ(仮)主に趣味やプログラミングに関するメモを書いています。

JavaでCSV出力するライブラリを色々探してみた

JavaCSV出力をする必要があって、自分で書くのは嫌なのでライブラリを探しました。
 
最初は、 Commons CSV を検討していました。
Commons CSVは暫く2007年ぐらいから開発が始まっていたようですが、
2014年になって漸くリリースされたライブラリで、
後発な分イケてるのかなーと思って眺めていましたが、
アノテーションで出力する列の指定などが出来なさそうなので却下しました。
 
やりたいのは Entity からサクッと出力する事なんです。
 
続いて見つけたのが、 Super CSV Annotation でした。
こちらは Super CSVアノテーションの機能をプラスしたやつでした。
これはイケそうだと思って検証していると、
ダブルクォーテーションで囲む設定が全項目に対して囲むかどうかしか出来ませんでした。
しかもヘッダーの項目も含めて囲まれてしまうという。。。
(間違っていたらすみません。)
 
ヘッダーはダブルクォーテーションで囲まずに、
データの部分だけ囲んで欲しいんです。
 
折角アノテーションで出来ると思ったのに、
直そうと思ったら Super CSV も直さなくちゃいけないのでこれも却下しました。
 
最後に見つけたのが、 OrangeSignal CSV というライブラリでした。
今度こそ!と思って検証に入りました。
 
このライブラリも Entity にアノテーション付けて出力できたり、
データの部分だけダブルクォーテーションで囲んでくれるようでした。
さらに数値かどうかを判断して囲んでくれるという・・・
と、思っていたのですがどこで見間違えたのか、それは出来ませんでした。
ソースもその部分がコメントアウトされていて未実装でした。。。
 
でもなかなか良さ気で使えそうだなぁと思っていたのですが、
ふと気が付くと、ダブルクォーテーションで囲めるのは、
データ項目全部か途中で改行などがあった場合の2パターンでした。
そして、空文字の部分も囲んでくれていました。。。
 
うーん、ちょっとそこは囲んで欲しくないなぁ。
CSV ってデータ連携に使ったりするので、
数値かどうかでダブルクォーテーションを付けるというのも疑問でした。
 
この列とこの列は文字列だから絶対にダブルクォーテーションで囲んで、
null や空文字のときは、ダブルクォーテーションで囲まないというのが理想でした。
 
幸いソースが綺麗だったで自分で改造して、理想的な CSV が出力できるようにしてみました。
 
プルリクも投げてみましたが、取り込まれるかどうかは別の話。。。
 
(顔のアイコンは出て来なくてもいいのに。。)
 
 
domagen で SQL から Entity を作ってその Entity をライブラリに渡してダウンロード。。。
みたいな使い方してます。