使用ApacheCommons库解析CSV数据时遇到错误

java.lang.IllegalStateException: IOException reading next record: java.io.IOException: 
(line 46196) invalid char between encapsulated token and delimiter

我正在使用如下设置:

try {
    File csvInput = getLatestFilefromDir(CSV_PATH);
    reader = new FileReader(csvInput);

    final CSVFormat csvFormat = CSVFormat.Builder.create()
            .setHeader(HEADERS)
            .setDelimiter(';')
            .setQuote('"')
            .setEscape('\\')
            .setSkipHeaderRecord(true)
            .build();

    Iterable<CSVRecord> csvRecords = csvFormat.parse(reader);

    for (CSVRecord csvRecord : csvRecords) {
        // processing
    }
} catch (Exception e) {
    log.error("Error retrieving CSV data.");
    e.printStackTrace();
}

如错误所示,数据存在某些缺陷,无效条目:

"TABLE_NAME";"ATTRIBUTE";"VALUE"
"SWAP_LEG_TYPE";"SWAP_LEG_TYPE_DESC";"The payments (PAY or RECEIVE) of this \"Leg\" are based on the yield linked to a specific equity or an index. (or to the actual market price of the equity or the index ???)"
"CNTPTY_TYPE";"CNTPTY_TYPE_DESC";"With Local Government we mean the so called \Regional Governments or Local Authorities\\" (RGLA) as defined by the EBA (European Banking Authority).\""

更改数据不在我的控制范围之内.假设反斜杠用于转义引号,就像在其他示例中一样,在本例中使用不当,并将其写入CSV文件,希望应该有

...Authorities\ \" (RGLA)...

有没有办法在解析前替换字符串? 或者,我可以做些什么来扩展CSVFormat构建器以接受这样的数据?

我正在考虑一种简单的方法来读取整个输入,并只为\替换字符串\\,因为这是百万行中唯一的实例,但这似乎是错误的.

推荐答案

这是一个稍加修改的原始版本,应该可以解决你的问题,setQuote(null)可以做到所有的魔力.

    final CSVFormat csvFormat = CSVFormat.Builder.create()
            .setHeader(HEADERS)
            .setDelimiter(';')
            .setQuote(null)
            .setEscape('\\')
            .setSkipHeaderRecord(true)
            .build();

Java相关问答推荐

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

参数值[...]与预期类型java.util.Date不匹配

为什么BasicComboBoxRenderer在文本不存在或文本为空的情况下设置两次文本?

我无法将附件发送到NetBeans之外

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

连接Quarkus中的两个异步操作

只需最少的代码更改即可将版本号标记添加到日志(log)

Spring Boot Maven包

如何在ApachePOI中将图像添加到工作表的页眉?

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

Spring Data JPA慢慢地创建了太多非活动会话

有没有可能在时间范围内得到多种解决方案?

如何制作回文程序?

这是JavaFX SceneBuilder的错误吗?

如何在更改分辨率时将鼠标坐标计算为世界坐标

如何在 Java 中使用纪元时间和时区查找一天的结束时间

Mapstruct 找不到产品映射器的实现

使用 JNI 的 AttachCurrentThread 方法在已附加到 JVM 的线程上执行 pthread_join 是否安全

Spring application.properties、docker 和测试

为什么 NAN 的比较返回 true?