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

我正在尝试生成以下格式的平面文件,该文件没有任何分隔符。


Customer.java


 private String customerId;

 private String customerName;

MyFlatFileItemWriter.java


@Component

public 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 Martin

911Donald Trump

正如您所看到的,文件中没有逗号(,)或管道(|)预期的分隔符。但即使我没有设置任何内容或设置为空作为分隔符,我也会在输出文件中得到默认分隔符“,”。请让我知道如何在没有任何分隔符的情况下按原样编写字段值。


桃花长相依
浏览 108回答 1
1回答

斯蒂芬大帝

发生的情况是,作为分隔符的空字符串被忽略,最终得到默认分隔符“,”。我认为这是 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();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java