我正在尝试以以下格式生成没有任何分隔符的平面文件。
客户.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();
}