为了账号安全,请及时绑定邮箱和手机立即绑定

如何在使用 Spring Batch ItemWriter 写入文件时关闭分隔符

如何在使用 Spring Batch ItemWriter 写入文件时关闭分隔符

桃花长相依 2023-08-16 18:22:44
我正在尝试生成以下格式的平面文件,该文件没有任何分隔符。Customer.java private String customerId; private String customerName;MyFlatFileItemWriter.java@Componentpublic class MyFlatFileItemWriter {    @Bean(name = "myWriter")    public FlatFileItemWriter<Customer> bondEdgeFlatFileItemWriter() {        return new FlatFileItemWriterBuilder<Customer>()                .name("myWriter")                .resource(new FileSystemResource("myFileNameWithPath"))                .delimited().delimiter("")                .names(new String[] {"customerId", "customerName" })                .build();    }}我期待下面的输出文件myFileNameWithPath.txt。123Jorge Martin911Donald Trump正如您所看到的,文件中没有逗号(,)或管道(|)预期的分隔符。但即使我没有设置任何内容或设置为空作为分隔符,我也会在输出文件中得到默认分隔符“,”。请让我知道如何在没有任何分隔符的情况下按原样编写字段值。
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

发生的情况是,作为分隔符的空字符串被忽略,最终得到默认分隔符“,”。我认为这是 Spring Batch 中的一个错误,因为当您直接在编写器中设置空分隔符而不使用构建器时,不会发生这种情况。请打开一个问题并引用此问题,我们将解决它。

请让我知道如何在没有任何分隔符的情况下按原样编写字段值。

同时,您可以使用以下应该有效的方法:

@Bean(name = "myWriter")

public FlatFileItemWriter<Customer> bondEdgeFlatFileItemWriter() {

    BeanWrapperFieldExtractor<Customer> fieldExtractor = new BeanWrapperFieldExtractor<>();

    fieldExtractor.setNames(new String[] {"customerId", "customerName" });

    DelimitedLineAggregator<Customer> lineAggregator = new DelimitedLineAggregator<>();

    lineAggregator.setDelimiter("");

    lineAggregator.setFieldExtractor(fieldExtractor);


    return new FlatFileItemWriterBuilder<Customer>()

            .name("myWriter")

            .resource(new FileSystemResource("customers.txt"))

            .lineAggregator(lineAggregator)

            .build();

}


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信