Spring Batch - Как сохранить информацию заголовка в отдельных объектах строки в FlaFileItemReader - PullRequest
0 голосов
/ 20 марта 2020

Я имею дело с текстовым файлом, разделенным символом '|' имея заголовок и данные, сопровождаемые трейлером. Эта последовательность может повторяться в том же файле. Итак, мой формат выглядит примерно так:

Header|Date - Employer1#|<br>
Employee ID|FirstName|LastName|<br>
Employee ID|FirstName|LastName|<br>
Trailer|2<br>
Header|Date - Employer2#|<br>
Employee ID|FirstName|LastName|<br>
Employee ID|FirstName|LastName|<br>
Employee ID|FirstName|LastName|<br>
Trailer|3<br>

Моя проблема в том, что для каждой записи, у объекта строки, который я создаю, должен быть работодатель # из заголовка. При чтении следующего заголовка все последующие строки должны иметь нового работодателя #. Я использую Spring Batch с FlatFileItemReader для анализа этого файла. У меня есть собственный сопоставитель строк, в котором я определяю, является ли строка заголовком или данными, но я не уверен, как сохранить данные заголовка, чтобы при чтении строки данных у меня был доступ к ранее прочитанному заголовку

@Override
    public MyDTO mapLine(String line, int lineNumber) throws Exception { 
        if(line != null && line.contains("HEADER")) {
            String[] tokenizedHeader = line.split("|");
            //Code to parse Header and save that data
            }else {
            DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer();
            delimitedLineTokenizer.setDelimiter("|");   
            delimitedLineTokenizer.setStrict(false);
            delimitedLineTokenizer.setNames(new String[] {"EMPLOYEE ID","FIRST NAME","LAST NAME"});
            setLineTokenizer(delimitedLineTokenizer);
            setFieldSetMapper(myFieldSetmapper);            
            return (MyDTO) this.fieldSetMapper.mapFieldSet(this.lineTokenizer.tokenize(line));
        }
    }

Любые выводы будут оценены.
Спасибо

...