いくつかのCSVファイルがあり、それらをロードして列の値で行を検索する必要があります。誰かがOpenCSVプロジェクトを使用してCSVをロードすることを提案しています。しかし、これが最善の方法かどうかはわかりません。OpenCSVは検索/フィルターユーティリティを提供しますか?
私が必要なことをするためのより良い方法はありますか?
CSVファイルからMySQLやSQLiteなどのお気に入りのSQLエンジンにデータをロードし、SQLを使用して便利かつ高速にフィルタリングできます。これは一般的なタスクであるため、データベースはCSVファイルからデータをインポートするためのツールを使用する準備ができています。これはSQLiteで行う方法です:http ://www.sqlite.org/cvstrac/wiki?p = ImportingFiles
組み込みデータベースを使用して、CSVを検索機能から分離します。
Apache Commons CSVのようなものは、値の2次元文字列配列を提供するだけです。どんな解決策でもこれ以上のものが得られるとは思えません(CVSファイルにタイプ/スキーマ情報がない場合)。これらの結果に対する巧妙に作成されたループだけで十分だと思います。これが最も簡単で最速になります(要求どおり)。
さらに多くのことを行いたい場合は、JVMで標準のJava提供のJavaDbデータベースを実行し、そのデータベースに結果をロードして、外部のデータソース/サービスなしでSQLクエリを実行できます。
かなり大きなCSVをロードする場合、メモリが問題になる可能性があることに注意してください。ただし、これらはどれくらいの大きさですか?最近のメモリはとても安いです。
CSVファイルが大きすぎてメモリに保持できず、最初にすべてをデータベースに保存することに頼りたくない場合(これは、面倒なディスクからメモリ、ディスクへの操作になります)、誰も言及していないように見える別のアプローチがあります。ストリーミング。
このアプローチは、ファイルからいくつかの行を読み取り、それらを処理してから、検索に一致しない行を破棄することで構成されます。たとえば、ApachecommonsFileUtilsを使用してこれを行うことができます。これは、既存のCSV APIがこれを提供している可能性がありますが、私はそれを確認していません。