Spring Batch: как разобрать CSV-файл?

Одной из распространенных задач в Spring Batch, для которой он используется, является анализ CSV-файлов, но CSV-файлы бывают разных форм и форм… и некоторые из них синтаксически неверны. В настоящее время я пытаюсь проанализировать недопустимый CSV-файл: Мой файл CSV data.CSV:

"1;13/4/1992;16/7/2006"
"2;31/5/1993;1/8/2009"
"3;21/4/1990;27/4/2010"

Я использовал этот код здесь. Это работает для меня, но я хочу использовать собственный CSV! любое предложение, пожалуйста?

покажи мне ошибку и данные-1.csv.

sh.seo 18.04.2019 18:19

Вы возвращаетесь из своего цикла. Этот код всегда будет обрабатывать первую строку, а затем возвращаться. Я предполагаю, что это не то, что вы хотите сделать. - вам действительно нужно описать проблему, с которой вы столкнулись, если исправление не решает ее.

CryptoFool 18.04.2019 18:43

Скорее всего, это повторяющийся вопрос, касающийся базового чтения файлов: stackoverflow.com/a/27324399/196869.

Jim 18.04.2019 18:50

Я обновил свой код @devdotlog, вы можете увидеть файл

abdallah 19.04.2019 09:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
298
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как я уже сказал в комментарии к ответу, на который вы ссылаетесь, вы можете использовать FlatFileItemReader вместо ListItemReader, и это должно сработать. Я использовал ListItemReader, чтобы предоставить автономный пример, который вы можете запустить (без необходимости загружать CSV-файл и т. д.). Суть другого вопроса заключалась в том, как обрезать начальные/конечные " перед разбором строк, и хитрость заключалась в использовании процессора составных элементов, как показано в примере.

Вам не нужно создавать новый ридер, вот пример FlatFileItemReader, который вы можете использовать с тем же примером:

@Bean
public FlatFileItemReader<String> itemReader() {
    return new FlatFileItemReaderBuilder<String>()
            .name("itemReader")
            .resource(new FileSystemResource("/absolute/path/to/file"))
            .lineMapper(new PassThroughLineMapper())
            .build();
}

Надеюсь это поможет.

Другие вопросы по теме