【问题标题】:adding the error line in log when SuperCSV failsSuperCSV 失败时在日志中添加错误行
【发布时间】:2016-03-14 06:47:20
【问题描述】:

我正在使用 SuperCSV 来解析 CSV 文件。它完美无缺。 我传递的 CSV 文件中可能包含一些无效记录。到时候能不能记录下哪一行没有处理?

List<InputBean> csvContentsList = new ArrayList<InputBean>();
ICsvBeanReader beanReader = new CsvBeanReader(fileReader, CsvPreference.STANDARD_PREFERENCE);
InputBean bean = null;
do {
    try {
        bean = beanReader.read(InputBean.class, header, getProcessors());
        if (bean != null)
            csvContentsList.add(bean);
    } catch (Exception e) {
        logger.error("Error in parsing the record:"+e.getMessage());
    }
} while (bean != null);

在此代码中,如果 CSV 文件包含无效记录,则会引发错误并被捕获到 catch 块中。怎么可能打印出无效记录?还是它的行号?

【问题讨论】:

  • 如果您不喜欢捕获异常,您也可以使用抑制和收集每个异常的单元处理器来实现这一点。有关示例,请参见 here

标签: java csv supercsv


【解决方案1】:

如果在使用 beanreader.read(...) 方法处理 CSV 文件时出现无效行,那么文档会说会抛出 SuperCsvException,您可以使用方法 getCsvContext() 询问 CsvContext 并从中获取各种信息包括行号在内的上下文信息。因此,请更具体地了解您捕获的内容并适当地处理它。

相关文档:

https://super-csv.github.io/super-csv/apidocs/org/supercsv/io/ICsvBeanReader.html

https://super-csv.github.io/super-csv/apidocs/org/supercsv/exception/SuperCsvException.html#getCsvContext--

https://super-csv.github.io/super-csv/apidocs/org/supercsv/util/CsvContext.html

【讨论】:

  • 这里的例外是 IllegalArgumentException,因为列数不匹配...无论如何感谢您的指点。
猜你喜欢
  • 2021-01-26
  • 2018-05-29
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2013-08-27
相关资源
最近更新 更多