【问题标题】:Read specific lines from text file using Item reader in spring batch在春季批处理中使用项目阅读器从文本文件中读取特定行
【发布时间】:2020-03-02 05:20:17
【问题描述】:

我正在尝试读取未格式化的附加文本文件,从行 START-OF-DATA 到 END-OF-DATA 并忽略文件中的所有其他行。sampleText file

我像下面这样创建了我的阅读器,但由于我的文件是非结构化的并且它在 actula 数据之前包含额外的行,所以它无法正常工作

public CustomFlatFileItemReader<MyBean> reader() {
    CustomFlatFileItemReader<MyBean> reader = new CustomFlatFileItemReader<MyBean>();

    reader.setLineMapper(new DefaultLineMapper<InterestRate>() {{
        setLineTokenizer(new DelimitedLineTokenizer("|") {{
            setNames(new String[] { "name", "refKey1","refKey2","refKey4","refKey5","refKey6","refKey7"});
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
            setTargetType(MyBean.class);
        }});
    }});
    return reader;

【问题讨论】:

  • 您能否分享一个最小的、可重现的示例 (stackoverflow.com/help/minimal-reproducible-example),说明您迄今为止所做的工作以及您面临的问题?另外,您介意将输入共享为文本而不是图像吗?
  • 当我使用文本时,它会自动转换成不同的格式,没有线刹车,所以我附上了一张图片

标签: spring spring-boot spring-batch


【解决方案1】:

为此,您需要一个自定义阅读器(可以扩展 FlatFileItemReader)。此阅读器应跳过行,直到它读取“START-OF-DATA”,然后返回每一行,直到它读取“END-OF-DATA”,然后返回null

中间的行是常规的管道分隔值,因此您可以使用共享的相同配置将字段映射到您的域对象。

【讨论】:

  • 感谢@mahmoud 的回复,我正在尝试实现ItemReader 而不是扩展FlatFileItemReader,哪种方法最好?
  • 通过扩展FlatFileItemReader,您可以重用解析和映射字段等的大部分逻辑。但您也可以创建自定义阅读器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多