我正在尝试生成以下格式的平面文件,该文件没有任何分隔符。
客户.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
如您所见,文件中没有逗号 (,) 或管道 (|) 所需的分隔符。但即使我没有设置任何内容或设置为空作为分隔符,我也会在输出文件中得到默认分隔符“,”。请让我知道如何按原样编写不带任何分隔符的字段值。
最佳答案
发生的情况是空字符串作为分隔符 is ignored最终您将得到默认的分隔符“,”。我认为这是 Spring Batch 中的一个错误,因为当您直接在编写器中设置空分隔符而不使用构建器时,不会发生这种情况。请打开一个问题并引用此问题,我们将修复它。
Please let me know how to write the field values as is without any delimiter.
与此同时,您可以使用以下应该有效的方法:
@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();
}
关于java - 如何在使用 Spring Batch ItemWriter 写入文件时关闭分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068980/