如何解决BeanIO - 如何检测具有相同类型的多个记录
如何检测定长文件中相同的记录类型? BeanIO 只检测到第一个记录头,没有其他两个文件。 我想要的是获取带有三个文档及其项目代码的包装类。
这是一个固定长度的txt文件示例:
php.ini
我想检测标题 (RH) 和详细信息 (RD) 记录。
我为每个子组设计了一个组列表,其中包含另一个组。
顶级班级:
Unknown record
Unknown record
RH20210607A
RDitem1
RDitem2
Unknown record
RH20210607B
RDitem2
RDitem3
Unknown record
Unknown record
Unknown record
RH20210607C
RDitem1
RDitem4
RDitem5
子组类:
@Group(name = "fixedFile")
public class ListDocumentWrapper {
@Group(minOccurs=1,type=Document.class,collection = List.class)
List<Document> documentList;
}
单记录类:
@Data
public class Document{
@Record(order = 1,minOccurs=1,maxOccurs=1)
private RH recordHeader;
@Record(order = 2,type=RD.class,collection = List.class)
private List<RD> recordDetails;
}
@Data
@Record
public class RH{
@Field(ordinal = 0,required = true,length = 2,align = Align.LEFT,rid = true,literal = "RH")
private String recordType;
@Field(ordinal = 1,length=8,format = "yyyyMMdd")
private LocalDate documentDate;
@Field(ordinal = 2,length = 1,padding = ' ',align = Align.LEFT)
private String documentCode;
}
BeanReader 的初始化:
@Data
@Record
public class RD{
@Field(ordinal = 0,literal = "RD")
private String recordType;
@Field(ordinal = 1,length = 5,align = Align.LEFT)
private String itemCode;
}
感谢帮助
解决方法
我没有找到正确的解决方案,但我找到了解决方法。
想要进行一次阅读并获得文档列表
这是解决方法。
首先我不明白 beanReader.read() 提取流的第一个元素。所以没有必要创建ListDocumentWrapper,而是用一个简单的while循环读取所有文档。
这是代码的摘录:
List<Document> documentList = new ArrayList<>();
Document documentMessage = null;
int documentIndex = 0;
while ((documentMessage = (Document) beanReader.read()) != null) {
// process the documentMessage...
log.debug("Reading documentMessage ["+documentIndex+"]... => " + documentMessage);
documentList.add(documentMessage);
documentIndex++;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。