java - 异常后继续 SuperCSV 读取

标签 java supercsv

有没有办法在抛出单元处理器异常后继续从 CSV 读取?我试图从文件中获取所有好的数据,用它做我需要的事情,并向用户报告存在哪些坏行(如果有)。例如,如果我有一个只有两列(名称、 Activity )的文件。 Name 只是一个字符串,而 active 是一个 boolean 值。在我的 CellProcessors 列表中,两者都不是可选的。如果单行的 Activity 列为空,我想在之后继续处理这些行。

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

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

最佳答案

我自己做了一些测试,然后想出了一个解决方法。这当然不理想。我希望上个月 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 时,两个循环都会根据需要终止。

关于java - 异常后继续 SuperCSV 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897977/

相关文章:

java - 找到第一个字母字符并将其替换为大写字符

java - 如何使用自定义 CsvPreference 在每个字段上应用引号字符

java - 使用 SuperCSV 一次性验证每个字段

java - JsonIgnore 不适用于 Spring

java - 将 Soap XML 响应转换为对象

java - 如何最好地参数化字符串

java - 在 IntelliJ 中创建 gradle 项目的问题

java - 用 supercsv 写 UTF-8 BOM

java - 将 Null 添加到 ArrayList 时出现 UnsupportedOperationException