2012-02-09 87 views
1

我正在寻找一个Java库,它可以帮助我解析包含管道分隔记录的CSV文件,并从它们中创建我的bean类的实例。如何将CSV记录映射到bean?

我已经研究过几个替代方案,例如SuperCSV,OpenCSV,BeanIO,JFileHelper,jsefa等等,但是他们都不知道如何做。图书馆的

要求:

  1. 与字段的可变数目支撑记录
  2. 提供迭代式的访问,因此该文件是永远不会完全加载到内存中
  3. 支持映射到其实际场类型,即能够采取一个日期字段,并把它一个java.util.Date到我的豆,而不是一个字符串
  4. 让我提供我自己的工厂对象来创建的豆,而不是违约到Class.newInstance()

我看过的所有库似乎缺乏要求#4。

我可以接受反射,但问题是它仍然为CSV文件中的每一行创建一个新的bean对象。由于我现在想要对我的bean做的唯一事情是将它传递给我的持久层并将其存储在数据库中,因此将两个bean实例放入一个池并创建一个工厂,这个池。通过这种方式,我可以重新使用我的实例,并且在GC出现之前解析100000行CSV文件不会导致100000个实例存在内存中。

有谁知道可以处理所有这些需求的库吗?

+1

您是否有证据表明创建新实例是性能瓶颈? JVM非常擅长回收短暂的对象。如果您还没有尝试过,那么请尝试优化。 – skaffman 2012-02-09 10:55:53

+0

嗯,你是对的:我没有证据。我会用SuperCSV(看起来很好)工作,但我仍然会采取其他选择。 – 2012-02-09 11:51:20

回答

1

这可能是一种替代方案:http://jsapar.tigris.org/
但它可能会在要求#4上不足。

在这里,你可以找到替代的更全面的列表:http://jsapar.blogspot.se/p/links.html

编辑
作为jsapar 1.8版本,现在可以自定义在外部工厂类的Java对象的创建,所以我想这个要求# 4现在也符合。