You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CSVParser/CSVReader解析CSV时遭遇未终止引号字段异常

问题描述

使用CSVParser和CSVReader解析CSV文件时,遇到末尾带多个分号的行解析失败,抛出Unterminated quoted field at end of CSV line异常。相关代码及测试数据如下:

代码片段

char QUOTE = '"';

InputStreamReader reader = new InputStreamReader(content);
CSVParser csvParser = new CSVParserBuilder()
     .withSeparator(";".charAt(0))
     .withQuoteChar(QUOTE)
     .build();
CSVReader csvReader = new CSVReader(reader);

测试CSV行

"GGDIRECT";"ARCIT_TEST_1";"Test table for ArcIt";500;;;

抛出异常

java.io.IOException: Unterminated quoted field at end of CSV line
解决方法
  1. 关联自定义解析器到CSVReader
    你构建了自定义分隔符和引号规则的CSVParser,但初始化CSVReader时未传入该解析器,导致CSVReader使用默认的逗号分隔符规则解析,这是核心问题之一。正确初始化方式:

    CSVReader csvReader = new CSVReaderBuilder(reader)
        .withCSVParser(csvParser)
        .build();
    
  2. 配置解析器兼容末尾空字段
    针对末尾多分隔符的场景,需要给CSVParser添加额外配置,避免把末尾的空字段误判为未闭合的引号字段:

    CSVParser csvParser = new CSVParserBuilder()
         .withSeparator(";".charAt(0))
         .withQuoteChar(QUOTE)
         .withAllowMissingColumnNames(true) // 允许列数不匹配的行
         .withTrim(false) // 保留空字段,不自动忽略
         .build();
    
  3. 检查QUOTE变量定义
    如果你的代码中QUOTE实际是char QUOTE = '""';,这会导致编译错误(单个char变量无法存储两个字符),正确定义应为char QUOTE = '"';。


内容的提问来源于stack exchange,提问作者Jelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:04:57