JavaCSVTobean。解析失败,解析CSV时出错
我试图在Eclipse中用OpenCSV解析一个大的CSV文件。 以下是CSV文件的前4条记录。完整文件有219590条记录:-
0,23,1,0,someone@email.com,"Construction/Contractors/Contractors"
0,43,1,0,someone@email.com,"Engineering/Electrical Engineering/Electrical Engineering"
0,395,1,0,someone@email.com,"Sales/Sales Force Management/Sales Management"
0,398,1,0,someone@email.com,"Sales/Sales Strategy/Sales"
下面是Java代码:-
File csvFile = new File("data/userattrib2_30day.csv");
ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
strategy.setType(UserAttribRecord.class);
String[] columns = new String[] {"userId", "attributeId", "rating", "timestamp", "email", "attributeDesc"};
strategy.setColumnMapping(columns);
CSVReader reader = new CSVReader(new FileReader(csvFile));
CsvToBean<UserAttribRecord> csv = new CsvToBean<UserAttribRecord>();
List<UserAttribRecord> userAttribList = csv.parse(strategy,reader);
它失败于:-
Exception in thread "main" java.lang.RuntimeException: Error parsing CSV!
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:95)
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:75)
如何找出错误是什么?似乎没有任何调试信息,所以我不知道哪个字段的哪个记录出现了错误。如何调试这个? 谢谢
# 1 楼答案
我刚刚尝试了univocity-parsers,我可以毫无问题地解析您的示例输入。试一试,因为它比OpenCSV快两倍(平均快两倍)。这是我的代码:
首先,将
@Parsed
注释添加到要从CSV加载的字段中(有许多选项可用,请查看文档)以下是解析文件所需的代码:
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)
# 2 楼答案
如果你能自己构建,那就用opencsv的主干构建吧。我修改了CsvToBean以打印出错误发生时它所在的行号
这将在3.6版本中发布,除非出现任何问题,否则应该在感恩节前发布
我很好奇是什么错误导致了这一点。如果你再往下看一下你的异常堆栈跟踪,你应该会看到一个“由引起的:”就是CsvToBean捕获的异常。考虑到你有超过20万行代码,我怀疑你遇到了内存不足的异常——这意味着你要么需要将文件拆分成更小的文件,增加JVM的内存,要么使用3.5版本中引入的IterableCsvToBean,它允许逐行解析
希望有帮助
:)