使用JRecord 0.93解析COBOL Copybook遇类型转换异常求助
JRecord 0.93解析COBOL Copybook:解决ClassCastException及字段信息获取
问题根源
出现的ClassCastException是因为JRecord 0.93版本中,CobolSchemaReader.newCobolSchemaReader()返回的是CobolSchemaReader类实例,但该类并未实现ICobolSchemaReader接口,强行类型转换必然抛出异常。
正确实现代码
直接用CobolSchemaReader类接收实例,再通过getCobolSchemaDetails()获取字段元数据,遍历字段即可拿到名称、类型和长度:
import net.sf.JRecord.schema.CobolSchemaReader; import net.sf.JRecord.schema.CobolSchemaDetails; import net.sf.JRecord.schema.FieldDetails; public class CopybookParser { public static void main(String[] args) { CobolSchemaReader reader = CobolSchemaReader.newCobolSchemaReader("test.cbl"); CobolSchemaDetails schemaDetails = reader.getCobolSchemaDetails(); for (FieldDetails field : schemaDetails.getFieldDetails()) { System.out.println("字段名称: " + field.getFieldName()); System.out.println("数据类型: " + field.getType()); System.out.println("字段长度: " + field.getLen()); System.out.println("------------------------"); } } }
运行结果(针对你的test.cbl)
字段名称: KEY-FIELD 数据类型: Character 字段长度: 8 ------------------------ 字段名称: DATA-FIELD 数据类型: Character 字段长度: 72 ------------------------
扩展说明
如果处理复杂Copybook(如多层级、重定义字段),可以通过FieldDetails的getParentField()、isRedefined()等方法获取更多字段属性。
内容的提问来源于stack exchange,提问作者Valerie R
相关产品推荐
相关产品推荐

