Parsing 使用RowProcessor解析固定宽度文件(Univocity)

Parsing 使用RowProcessor解析固定宽度文件(Univocity),parsing,fixed-width,univocity,Parsing,Fixed Width,Univocity,我正在处理一个固定宽度的文件,其中包含3种不同类型的bean: Bean 1(头):长度=256;从0256Q开始;一个 标题 Bean 2(记录):长度=768;从0768T开始; 可重复 Bean 3(页脚):长度=256;从0256Z开始;一 单页脚 我尝试了许多Univocity选项,但问题是processor.getBeans()方法总是在解析步骤之后为每种类型的bean返回一个空列表 有人能帮我吗 FixedWidthParserSettings settings

我正在处理一个固定宽度的文件,其中包含3种不同类型的bean:

  • Bean 1(头):长度=256;从0256Q开始;一个 标题
  • Bean 2(记录):长度=768;从0768T开始; 可重复
  • Bean 3(页脚):长度=256;从0256Z开始;一 单页脚
我尝试了许多Univocity选项,但问题是processor.getBeans()方法总是在解析步骤之后为每种类型的bean返回一个空列表

有人能帮我吗

        FixedWidthParserSettings settings = new FixedWidthParserSettings();
        settings.setAutoConfigurationEnabled(true);
        settings.setHeaderExtractionEnabled(false);
        settings.setRecordEndsOnNewline(true);
        settings.trimValues(false);
        
        FixedWidthFields header = FixedWidthFields.forParsing(Header0256Q.class);
        FixedWidthFields payment = FixedWidthFields.forParsing(Payment0768T.class);
        FixedWidthFields footer = FixedWidthFields.forParsing(Footer0256Z.class);
        
展望未来

        settings.addFormatForLookahead("0256Q", header);
        settings.addFormatForLookahead("0768T", payment);
        settings.addFormatForLookahead("0256Z", footer);
        
为每种类型的记录创建一个处理器

        BeanListProcessor<Header0256Q> headerProcessor = new BeanListProcessor<Header0256Q>(Header0256Q.class);
        BeanListProcessor<Payment0768T> paymentProcessor = new BeanListProcessor<Payment0768T>(Payment0768T.class);
        BeanListProcessor<Footer0256Z> footerProcessor = new BeanListProcessor<Footer0256Z>(Footer0256Z.class);
        
解析

        FixedWidthParser parser = new FixedWidthParser(settings);
        parser.parse(lFile);
吃豆子

        List<Header0256Q> headerRecords = headerProcessor.getBeans();
        List<Payment0768T> paymentRecords = paymentProcessor.getBeans();
        List<Footer0256Z> footerRecords = footerProcessor.getBeans();
        
        List<Header0256Q> headerRecords = headerProcessor.getBeans();
        List<Payment0768T> paymentRecords = paymentProcessor.getBeans();
        List<Footer0256Z> footerRecords = footerProcessor.getBeans();
        
        Dtazv dtazv = new Dtazv();
        dtazv.setHeaderRecord(headerRecords.get(0));
        dtazv.setPaymentRecords(paymentRecords);
        dtazv.setFooterRecord(footerRecords.get(0));