はじめに
皆さんは、JavaでCSVを扱うときに苦労した経験はないでしょうか。
CSV(Comma-Separated Values/Character-Separated Values)はデータをカンマ(,)やタブなどで区切って並べたテキスト形式のデータで、表計算ソフトやデータベースなどとのデータ交換のしやすさや可読性のよさなどから、古くから広く使われているデータ形式です。
このCSVのデータ形式には、さまざまな「方言」があり、データの中にカンマ(,)が入っている場合や、データをダブルクォーテーション(")で囲む場合、データの中にダブルクォーテーションがありそれがエスケープされている場合、データの中に改行がある場合などが存在します。また、CSVのデータ構成にもさまざまな種類があり、データの先頭行をヘッダとする場合や、コメント行や集計行がある場合、日時データを日付と時刻それぞれ別々の列とする場合など、CSVの読み書きは実はとっても面倒で悩ましいものです。
本記事では、さまざまなCSV方言やCSVデータ構成に対応している「OrangeSignal CSV」の特徴と機能を紹介します。
対象読者
- CSVライブラリを探している方
- CSVデータアクセス方式に興味がある方
必要な環境
この記事の内容に関しては次の環境で、動作確認を行っています。
- Windows Vista(Service Pack 2)
- JDK 6(1.6.0_17)
OrangeSignal CSVの特徴
「OrangeSignal CSV」はSourceForge.JPのOrangeSignal(オレンジシグナル)プロジェクトで開発されているオープンソースの国産CSVライブラリで、Apacheライセンスで提供されています。
では、OrangeSignal CSVの主だった特徴を見ていきましょう。
CSV方言
OrangeSignal CSVは、カンマやタブなどの「区切り文字」の指定や、ダブルクォーテーションなどの「囲み文字」の指定ができるだけでなく、NULL
文字列の指定やデータ中の改行文字列置換、空行や特定パターン行の無視など、非常に多くのCSV方言に対応しています。これらのCSV方言を細かく設定することで、Excel CSV形式やRFC-4180形式のCSVへも特に意識することなくアクセスができるようになっています。
CSV方言 | |
---|---|
区切り文字 | |
囲み文字 | 有効化/無効化の指定も可 |
エスケープ文字 | 有効化/無効化の指定も可 |
データ中の改行文字列置換 | |
NULL文字列 | 大文字・小文字を区別する/しないの指定も可 |
データ前のホワイトスペース除去 | |
データ後ろのホワイトスペース除去 | |
空行の無視 | |
正規表現による行の無視 | |
読み込み時の行スキップ | |
書き込み時の改行文字列指定 | ※読み込み時は、Windows/MAC/Linuxの改行文字を自動でサポート |
オブジェクトCSVマッピング
CSVデータをPOJO(Plain Old Java Object)オブジェクト、マップ、文字列配列、データベースの結果セットなど、いろいろな形式のオブジェクトへマッピングさせることができます。マッピングのさせ方も項目位置、項目名、アノテーションでの指定ができ、機能がとても充実しています。
データフィルタ
特定のCSVデータだけを読み込んだり書き込んだりするためのデータフィルタが提供されています。データフィルタは流れるようなインターフェースで、複雑な条件を簡単に指定できるようになっています。
統合アクセス
CSVファイルやストリームの読み込み・書き込みに対し、統一的なインターフェースが提供されており、任意のJavaオブジェクトとCSV間のアクセスが容易にできるようになっています。
DI/AOPコンテナフレームワーク不要
Spring FrameworkやSeasar2(S2Container)などのDI/AOPコンテナフレームワークが不要なので、依存関係を気にせずに現行システムやアプリケーションへの適用が可能です(もちろんDI/AOPコンテナフレームワーク環境下でも使用できます)。
次ページからOrangeSignal CSVを導入し、使い方を紹介しながら各機能の説明をしていきます。