Spring Batch пустой файл с использованием FlatFileItemReader xML - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь проверить, если входной файл пуст или содержит данные. Я работаю с конфигурацией Spring Batch через XML бобов, моя настоящая конфигурация выглядит так:

<!-- READERS -->
    <bean id="mgbfItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
        <property name="strict" value="false" />
        <!-- Read a file -->
        <property name="resource" value="file:///fichtemcomp/datent/#{processDataClass.fileName}" />
        <property name="linesToSkip" value="10" />
        <property name="encoding" value="UTF-8" />

        <!-- Mapper -->
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <!-- split it -->
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="delimiter" value="|" />
                        <!-- Valores del layout -->
                        <property name="names" value="name,secondName,lastName" />
                    </bean>
                </property>

                <!-- Wrapper -->
                <property name="fieldSetMapper">
                    <bean class="com.bbva.mgbf.batch.listeners.ScholarItemReader">
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <!-- END READERS -->

В моем классе Scholar ItemReader у меня есть что-то вроде:

@Override
    public Map<String, Object> mapFieldSet(FieldSet fieldSet) throws BindException {
        LOGGER.info("Reading all items \t {}", fieldSet);
        LOGGER.info("FieldCount \t {}", fieldSet.getFieldCount());

        Map<String, Object> dataIn = new HashMap<>(65);
        if (fieldSet.getFieldCount() > 0 && !fieldSet.readString(0).trim().isEmpty()) {
            LOGGER.info("in if ");

            for (int i = 0; i < 65; i++) {
                String key = "" + i;
                String value = fieldSet.readString(i);
                dataIn.put(key, value);
            }
        }else{
            dataIn.put("empty", "emptyFile");
        }
        return dataIn;
}

Но он никогда не вводится в объявлении "else", он просто завершает процесс.

Кто-нибудь знает, есть ли другой способ проверить, пуст файл или нет?

1 Ответ

2 голосов
/ 11 апреля 2020

fieldSetMapper вызывается, когда читатель уже прочитал строку, поэтому пытаться проверить, не пуст ли файл в устройстве отображения, слишком поздно в процессе.

Я пытаюсь проверить, если входной файл пуст или содержит данные

Я бы использовал шаг предварительной проверки, который проверяет, является ли файл пустым или нет.

...