我有几个 CSV 文件,我需要加载它们并按列值搜索行。有人建议使用 OpenCSV 项目来加载 CSV。但我不知道这是否是最好的方法。OpenCSV 是否提供一些搜索/过滤实用程序?
有没有更好的方法来做我需要的事情?
您可以将 CSV 文件中的数据加载到您喜欢的 SQL 引擎中,例如 MySQL 或 SQLite,并使用 SQL 方便快捷地进行过滤。这是一项常见任务,因此数据库已经准备好使用工具从 CSV 文件中导入数据,这就是您在 SQLite 中可以做到的方式:http ://www.sqlite.org/cvstrac/wiki?p=ImportingFiles
如果您的 CSV 文件太大而无法保存在内存中,并且您不想先将所有内容存储在数据库中(这将是一个乏味的磁盘到内存到磁盘的操作),那么似乎没有人提到另一种方法:流媒体。
该方法包括从文件中读取一些行,对其进行处理,然后丢弃与您的搜索不匹配的行。例如,您可以使用 Apache commons FileUtils 来执行此操作。它可能是一些现有的 CSV API 提供的,我没有检查过。
像Apache Commons CSV这样的东西只会给你一个二维字符串数组。我怀疑任何解决方案都会给你更多的东西(在 CVS 文件中没有类型/模式信息),我怀疑这些结果的精心设计的循环就是你所需要的。这将是最简单和最快的(根据要求)。
如果您想做更多事情,您可以在 JVM 中运行标准 Java 提供的JavaDb 数据库,将结果加载到该数据库中,并在没有外部数据源/服务的情况下执行 SQL 查询。
请注意,如果您加载相当大的 CSV,内存可能会成为问题,但这些有多大?现在内存很便宜。
使用嵌入式数据库,将 CSV 与搜索功能分开。