javaspringspring-batchflatfilereader

Skip number of footer lines in Spring batch


I am using FlatFileItemReader to read a delimited flat file. While I could skip number of headers with field linesToSkip, I wasn't able to skip footers by number of lines.


Solution

  • You can create custom line mapper, within which you can either skip by regex match or line number.

    public class CustomLineMapper extends DefaultLineMapper<FieldSet> {
        @Setter
        private int totalItemsToRead;
        @Override
        public FieldSet mapLine(String line, int lineNumber) throws Exception {
            if(lineNumber > totalItemsToRead){
                return null;
            }
            return super.mapLine(line, lineNumber);
        }
    }
    

    Finally register the custom line mapper the FlatFileItemReader

    CustomLineMapper lineMapper = new CustomLineMapper();
        lineMapper.setTotalItemsToRead(totalLinesInFile - numberOfLinesToSkipInFooter);
    
    FlatFileItemReader<FieldSet> reader = new FlatFileItemReader<>();
    // skip headers
    reader.setLinesToSkip(linesToSkipInHeader);
    // skip footer
    reader.setLineMapper(lineMapper);