Неопределенные двойные кавычки в весенней партии - PullRequest
2 голосов
/ 12 октября 2011

Я новичок в Spring Batch и столкнулся с проблемой.

Пакетное приложение, над которым я работаю, читает и обрабатывает строки из текстового файла с разделителями. Я настроил приложение на использование FlatFileReader для чтения текстового файла с разделителями, но проблема в том, что некоторые из считываемых данных содержат двойные кавычки. FlatFileParseException генерируется, когда FlatFileReader встречает одну двойную кавычку, но ни одна не генерируется, если присутствуют две двойные кавычки.

Кто-нибудь сталкивался с этой проблемой, и если так, каким было бы правильное решение? Управление самими данными, к сожалению, не вариант. Я пытался добавить escape-символ перед каждой двойной кавычкой, но исключение по-прежнему выдается независимо.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

8 голосов
/ 27 марта 2014

Я столкнулся с той же проблемой.Однако предлагаемое решение не является оптимальным.Что если в ваших данных нет подходящего символа кавычки?К сожалению, мы не всегда можем контролировать входные данные, и их предварительная обработка не всегда является хорошей идеей.Исследуя исходный код DelimitedLineTokenizer, я решил принять это решение, которым я поделюсь с этим ответом.Требуется переопределить класс, но при этом мы полностью устраняем проблему с символом кавычки.

import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;

    public class CustomDelimitedLineTokenizer extends DelimitedLineTokenizer {

        @Override
        protected boolean isQuoteCharacter(char c) {
            return false;
        }

    } 

Таким образом DelimitedLineTokenizer не может распознавать символ кавычки.Конечно, если нам нужна эта функциональность, то это решение неприемлемо, однако я думаю, что лучше, чем предложенное, просто решить проблему, а не решить ее.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 12 октября 2011

если в файлах нет реальных кавычек (2x символа кавычек), вы можете воспользоваться решением весеннего форума изменить символ кавычки для DelimitedLineTokenizer

            <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="quoteCharacter" value="@" />
                </bean>
            </property>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...