Class FlatFileItemReader<T>

All Implemented Interfaces:
ResourceAwareItemReaderItemStream<T>, ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean

public class FlatFileItemReader<T> extends AbstractItemCountingItemStreamItemReader<T> implements ResourceAwareItemReaderItemStream<T>, org.springframework.beans.factory.InitializingBean
Restartable ItemReader that reads lines from input setResource(Resource). Line is defined by the setRecordSeparatorPolicy(RecordSeparatorPolicy) and mapped to item using setLineMapper(LineMapper). If an exception is thrown during line mapping it is rethrown as FlatFileParseException adding information about the problematic line and its line number.

This reader is not thread-safe.

Author:
Robert Kasanicky, Mahmoud Ben Hassine
  • Field Details

    • DEFAULT_CHARSET

      public static final String DEFAULT_CHARSET
    • DEFAULT_COMMENT_PREFIXES

      public static final String[] DEFAULT_COMMENT_PREFIXES
    • comments

      protected String[] comments
  • Constructor Details

    • FlatFileItemReader

      public FlatFileItemReader()
  • Method Details

    • setStrict

      public void setStrict(boolean strict)
      In strict mode the reader will throw an exception on AbstractItemCountingItemStreamItemReader.open(org.springframework.batch.item.ExecutionContext) if the input resource does not exist.
      Parameters:
      strict - true by default
    • setSkippedLinesCallback

      public void setSkippedLinesCallback(LineCallbackHandler skippedLinesCallback)
      Parameters:
      skippedLinesCallback - will be called for each one of the initial skipped lines before any items are read.
    • setLinesToSkip

      public void setLinesToSkip(int linesToSkip)
      Public setter for the number of lines to skip at the start of a file. Can be used if the file contains a header without useful (column name) information, and without a comment delimiter at the beginning of the lines.
      Parameters:
      linesToSkip - the number of lines to skip
    • setLineMapper

      public void setLineMapper(LineMapper<T> lineMapper)
      Setter for line mapper. This property is required to be set.
      Parameters:
      lineMapper - maps line to item
    • setEncoding

      public void setEncoding(String encoding)
      Setter for the encoding for this input source. Default value is DEFAULT_CHARSET.
      Parameters:
      encoding - a properties object which possibly contains the encoding for this input file;
    • setBufferedReaderFactory

      public void setBufferedReaderFactory(BufferedReaderFactory bufferedReaderFactory)
      Factory for the BufferedReader that will be used to extract lines from the file. The default is fine for plain text files, but this is a useful strategy for binary files where the standard BufferedReader from java.io is limiting.
      Parameters:
      bufferedReaderFactory - the bufferedReaderFactory to set
    • setComments

      public void setComments(String[] comments)
      Setter for comment prefixes. Can be used to ignore header lines as well by using e.g. the first couple of column names as a prefix. Defaults to DEFAULT_COMMENT_PREFIXES.
      Parameters:
      comments - an array of comment line prefixes.
    • setResource

      public void setResource(org.springframework.core.io.Resource resource)
      Public setter for the input resource.
      Specified by:
      setResource in interface ResourceAwareItemReaderItemStream<T>
    • setRecordSeparatorPolicy

      public void setRecordSeparatorPolicy(RecordSeparatorPolicy recordSeparatorPolicy)
      Public setter for the recordSeparatorPolicy. Used to determine where the line endings are and do things like continue over a line ending if inside a quoted string.
      Parameters:
      recordSeparatorPolicy - the recordSeparatorPolicy to set
    • doRead

      @Nullable protected T doRead() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Read next item from input.
      Specified by:
      doRead in class AbstractItemCountingItemStreamItemReader<T>
      Returns:
      string corresponding to logical record according to setRecordSeparatorPolicy(RecordSeparatorPolicy) (might span multiple lines in file).
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • isComment

      protected boolean isComment(String line)
    • doClose

      protected void doClose() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Specified by:
      doClose in class AbstractItemCountingItemStreamItemReader<T>
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • doOpen

      protected void doOpen() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Open resources necessary to start reading input.
      Specified by:
      doOpen in class AbstractItemCountingItemStreamItemReader<T>
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • jumpToItem

      protected void jumpToItem(int itemIndex) throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Move to the given item index. Subclasses should override this method if there is a more efficient way of moving to given index than re-reading the input using AbstractItemCountingItemStreamItemReader.doRead().
      Overrides:
      jumpToItem in class AbstractItemCountingItemStreamItemReader<T>
      Parameters:
      itemIndex - index of item (0 based) to jump to.
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework