是否有办法在抛出单元处理器异常后继续从CSV读取?我试图从文件中获取所有好的数据,用它做我需要的,然后向用户报告存在哪些坏线(如果有的话)。例如,如果我有一个只有两列的文件(名称,活动)。 Name只是一个字符串,active是一个布尔值。在我的CellProcessors列表中都不是可选的。如果活动列的单行为空,我希望继续处理这些行。
Name, Active
Bob, 0
John, 1
Mary,
Harry, 1
在这种情况下,第4行 Mary 将失败。我想继续阅读第5行。所有示例都显示使用while循环读取直到EoF并且我没有看到获取行数的方法,因此我可以使用带有内部try / catch块的for循环。
答案 0 :(得分:2)
我自己做了一些测试并想出了一个解决方法。这当然不理想。我希望上个月在Git问题中提到的tryRead或hasNext版本已经实现,但是这将一直有效。
boolean failed = false;
do {
try {
failed = false;
while( (myClassBean= beanReader.read(MyClass.class, processors)) != null ) {
//Process the bean as normal
}
}
catch (SuperCsvCellProcessorException sccpe) {
//process the exception
failed = true;
}
} while (failed);
bean读取器在csv中保持其位置似乎没有任何问题,因此do-while的所有后续迭代将继续从下一行读取(如果有的话)。当达到EoF时,两个循环都会根据需要终止。