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

使用JRecord读取txt/cbl格式Copybook时被识别为XML,如何修正?

解决JRecord误将COBOL Copybook识别为XML的问题

问题原因

JRecord默认会根据文件扩展名、内容自动选择Copybook加载器,你的场景中它错误选用了XMLCopyBookLoader,导致COBOL格式的Copybook被当作XML解析,进而抛出SAX相关异常。

解决方案

1. 强制指定COBOL Copybook加载器

在构建ICobolIOBuilder时,显式设置加载器为CobolCopybookLoader,绕过自动检测逻辑:

import net.sf.JRecord.Cobol.CobolCopybookLoader;
import net.sf.JRecord.Interface.ICobolIOBuilder;
import net.sf.JRecord.JRecordInterface1;
import net.sf.JRecord.Common.ICopybookDialects;

// ...

ICobolIOBuilder schemaBuilder = JRecordInterface1.COBOL.newIOBuilder(copyBookFilePath)
        .setDialect(ICopybookDialects.FMT_MAINFRAME) // 用常量替代数字1,可读性更强
        .setFont("cp037")
        .setDropCopyBookNameFromFields(true)
        .setCopyBookLoader(new CobolCopybookLoader()); // 强制使用COBOL加载器

try { 
    AbstractLineReader reader = schemaBuilder.newReader(binaryFilePath);
    // 执行后续文件读取逻辑
} catch(Exception e) { 
    e.printStackTrace(); 
}

2. 检查Copybook文件内容

如果指定加载器后仍有问题,检查你的Copybook文件:

  • 确保文件开头没有XML声明(比如<?xml version="1.0"?>)或多余空白字符
  • 确认文件是纯COBOL语法,第一行应为COBOL的记录定义(比如01 RECORD-NAME.)

3. 验证Copybook格式正确性

用文本编辑器打开Copybook,确认符合COBOL语法规范,没有语法错误或格式混乱——这类问题也会导致加载器误判文件类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:42