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

标签 java spring-batch

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

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

相关文章:

c# - System.convert.ToString() 与 C# 中的显式类型转换

java - 如何在 spring 批处理作业中更改 ItemWriter 目标文件名?

java - 单元测试中 Spring Batch JobRepository 的事务问题

java - oracle.net.ns.NetException : Socket read timed out

java - 如何在 BeanWrapperFieldSetMapper 中转换多个日期?

java - 打印数组列表的内容

java - 如何修复 'SSLHandshakeException: Received fatal alert: decode_error' ?

java - Spring Batch 在运行步骤之前解析步骤的资源

java - 一种使用字符串创建新类的方法

java - HashMap 被最后一个值覆盖