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

客户.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


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

最佳答案

发生的情况是,空的String作为定界符is ignored,您最终得到了默认定界符','。我认为这是Spring Batch中的错误,因为在不使用构建器的情况下直接在编写器中设置空定界符时,不会发生这种情况。请打开一个与此SO问题有关的问题,我们将予以解决。


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


同时,您可以使用以下应该起作用的方法:

@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();
}

07-24 09:45
查看更多