在超出后继续SuperCSV读取

时间:2015-10-01 22:45:04

标签: java supercsv

是否有办法在抛出单元处理器异常后继续从CSV读取?我试图从文件中获取所有好的数据,用它做我需要的,然后向用户报告存在哪些坏线(如果有的话)。例如,如果我有一个只有两列的文件(名称,活动)。 Name只是一个字符串,active是一个布尔值。在我的CellProcessors列表中都不是可选的。如果活动列的单行为空,我希望继续处理这些行。

Name, Active
Bob, 0
John, 1
Mary, 
Harry, 1

在这种情况下,第4行 Mary 将失败。我想继续阅读第5行。所有示例都显示使用while循环读取直到EoF并且我没有看到获取行数的方法,因此我可以使用带有内部try / catch块的for循环。

1 个答案:

答案 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时,两个循环都会根据需要终止。