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

如何防止剧集角色重复创建及解决OpenCSV解析CSV末尾行异常问题

错误原因

该报错不是代码读取到文件末尾不知道终止,而是CSV文件本身存在格式问题:要么是文件末尾残留了多余的空行,要么是最后一行有效数据存在未闭合的双引号,opencsv解析时会把末尾的无效内容识别为第1036行,因此抛出未终止引用字段的异常。

解决方法

方案1:修复CSV源文件(优先选择)

  • 打开CSV文件拉到最底部,删除所有多余的空行、尾部空白字符
  • 检查最后一行(1035行)的所有字段,确保双引号都是成对闭合的
  • 如果该CSV是其他程序生成的,调整生成逻辑,避免输出格式错误的行和末尾空行

方案2:代码兼容异常格式

如果不能修改源文件,给opencsv增加容错配置即可,修改解析部分代码如下:

// 先导入需要的类
import com.opencsv.bean.CsvToBean;
import com.opencsv.exceptions.CsvException;

// 修改解析逻辑
CsvToBean<Character> csvToBean = new CsvToBeanBuilder<Character>(new FileReader(file))
        .withType(Character.class)
        .withSkipLines(1)
        // 过滤空行
        .withFilter(line -> {
            if (line == null || line.length == 0) return false;
            return !String.join("", line).isBlank();
        })
        // 关闭解析异常抛出,遇到错误行自动跳过
        .withThrowExceptions(false)
        .build();

List<Character> characters = csvToBean.parse();

// 可选:打印错误行信息方便排查
List<CsvException> parseErrors = csvToBean.getCapturedExceptions();
if (!parseErrors.isEmpty()) {
    System.out.printf("共跳过%d条格式错误的行%n", parseErrors.size());
}

额外优化建议

你当前的写入逻辑是全量覆盖整个CSV文件,数据量较大时性能损耗很高,后续可以调整为直接向文件末尾追加新行,不需要重写所有已有数据,运行效率会明显提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:09:01