在大型CSV中查找行的最简单,最快捷的方法

时间:2012-12-11 10:30:44

标签: java search csv filter

我有几个CSV文件,我需要加载它们并按列值搜索行。 有人建议使用OpenCSV项目加载CSV。但我不知道这是不是最好的方法。 OpenCSV是否提供了一些搜索/过滤实用程序?

有没有更好的方法来做我需要的?

4 个答案:

答案 0 :(得分:2)

您可以将CSV文件中的数据加载到您喜欢的SQL引擎中,例如MySQL或SQLite,并使用SQL方便快捷地过滤。这是一项常见任务,因此数据库已准备好使用工具从CSV文件导入数据,这是您在SQLite中执行此操作的方法:http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles

答案 1 :(得分:0)

使用嵌入式数据库,将CSV与搜索功能分开。

答案 2 :(得分:0)

Apache Commons CSV这样的东西只会给你一个二维字符串数组值。我怀疑任何解决方案都会给你更多的东西(在CVS文件中没有类型/模式信息),我怀疑这些结果的精心设计循环就是你所需要的。这将是最简单的最快(根据要求)。

如果您想要做更多事情,可以运行标准的Java提供的JavaDb database in-JVM,将结果加载到其中,并在没有外部数据源/服务的情况下执行SQL查询。

请注意,如果加载相当大的CSV,内存可能会出现问题,但这些内容有多大?如今,内存非常便宜。

答案 3 :(得分:0)

如果您的CSV文件太大而无法保留在内存中并且您不想首先将所有内容存储在数据库中(这对于内存到磁盘操作来说这将是一个繁琐的磁盘)那么还有另一种方法似乎没有人提到:流媒体。

该方法包括从文件中读取多个行,处理它们,然后丢弃与您的搜索不匹配的行。例如,您可以使用Apache commons FileUtils执行此操作。它可能是现有的一些CSV API提供的,我没有检查过。