Как отключить разделитель при записи в файл с помощью Spring Batch ItemWriter - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать плоский файл в следующем формате без разделителя.

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

здесь, поскольку вы видите, что в файле не ожидается разделитель запятой (,) или pipe (|).Но я получаю разделитель по умолчанию "," в выходном файле, даже если я ничего не установил или установил пустым в качестве разделителя.Пожалуйста, дайте мне знать, как записать значения полей без разделителей.

1 Ответ

1 голос
/ 24 сентября 2019

В результате получается, что пустая строка в качестве разделителя игнорируется , и в результате вы получаете разделитель по умолчанию ','.Я думаю, что это ошибка в 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...