Class FlatFileItemReader<T>
- java.lang.Object
- org.springframework.batch.item.ItemStreamSupport
- org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
- org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
- org.springframework.batch.item.file.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
RestartableItemReaderthat reads lines from inputsetResource(Resource). Line is defined by thesetRecordSeparatorPolicy(RecordSeparatorPolicy)and mapped to item usingsetLineMapper(LineMapper). If an exception is thrown during line mapping it is rethrown asFlatFileParseExceptionadding information about the problematic line and its line number.- Author:
- Robert Kasanicky, Mahmoud Ben Hassine
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_CHARSETstatic java.lang.String[]DEFAULT_COMMENT_PREFIXES
Constructor Summary
Constructors Constructor Description FlatFileItemReader()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()protected voiddoClose()Close the resources opened inAbstractItemCountingItemStreamItemReader.doOpen().protected voiddoOpen()Open resources necessary to start reading input.protected TdoRead()Read next item from input.protected voidjumpToItem(int itemIndex)Move to the given item index.voidsetBufferedReaderFactory(BufferedReaderFactory bufferedReaderFactory)Factory for theBufferedReaderthat will be used to extract lines from the file.voidsetComments(java.lang.String[] comments)Setter for comment prefixes.voidsetEncoding(java.lang.String encoding)Setter for the encoding for this input source.voidsetLineMapper(LineMapper<T> lineMapper)Setter for line mapper.voidsetLinesToSkip(int linesToSkip)Public setter for the number of lines to skip at the start of a file.voidsetRecordSeparatorPolicy(RecordSeparatorPolicy recordSeparatorPolicy)Public setter for the recordSeparatorPolicy.voidsetResource(org.springframework.core.io.Resource resource)Public setter for the input resource.voidsetSkippedLinesCallback(LineCallbackHandler skippedLinesCallback)voidsetStrict(boolean strict)In strict mode the reader will throw an exception onAbstractItemCountingItemStreamItemReader.open(org.springframework.batch.item.ExecutionContext)if the input resource does not exist.Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader
close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update
Methods inherited from class org.springframework.batch.item.ItemStreamSupport
getExecutionContextKey, setExecutionContextName, setName
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.batch.item.ItemReader
read
Methods inherited from interface org.springframework.batch.item.ItemStream
close, open, update
Method Detail
setStrict
public void setStrict(boolean strict)
In strict mode the reader will throw an exception onAbstractItemCountingItemStreamItemReader.open(org.springframework.batch.item.ExecutionContext)if the input resource does not exist.- Parameters:
strict-trueby 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(java.lang.String encoding)
Setter for the encoding for this input source. Default value isDEFAULT_CHARSET.- Parameters:
encoding- a properties object which possibly contains the encoding for this input file;
setBufferedReaderFactory
public void setBufferedReaderFactory(BufferedReaderFactory bufferedReaderFactory)
Factory for theBufferedReaderthat 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(java.lang.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 toDEFAULT_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:
setResourcein interfaceResourceAwareItemReaderItemStream<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
protected T doRead() throws java.lang.Exception
Description copied from class:AbstractItemCountingItemStreamItemReaderRead next item from input.- Specified by:
doReadin classAbstractItemCountingItemStreamItemReader<T>- Returns:
- string corresponding to logical record according to
setRecordSeparatorPolicy(RecordSeparatorPolicy)(might span multiple lines in file). - Throws:
java.lang.Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
doClose
protected void doClose() throws java.lang.ExceptionDescription copied from class:AbstractItemCountingItemStreamItemReaderClose the resources opened inAbstractItemCountingItemStreamItemReader.doOpen().- Specified by:
doClosein classAbstractItemCountingItemStreamItemReader<T>- Throws:
java.lang.Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
doOpen
protected void doOpen() throws java.lang.ExceptionDescription copied from class:AbstractItemCountingItemStreamItemReaderOpen resources necessary to start reading input.- Specified by:
doOpenin classAbstractItemCountingItemStreamItemReader<T>- Throws:
java.lang.Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
afterPropertiesSet
public void afterPropertiesSet() throws java.lang.Exception- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Throws:
java.lang.Exception
jumpToItem
protected void jumpToItem(int itemIndex) throws java.lang.ExceptionDescription copied from class:AbstractItemCountingItemStreamItemReaderMove 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 usingAbstractItemCountingItemStreamItemReader.doRead().- Overrides:
jumpToItemin classAbstractItemCountingItemStreamItemReader<T>- Parameters:
itemIndex- index of item (0 based) to jump to.- Throws:
java.lang.Exception- Allows subclasses to throw checked exceptions for interpretation by the framework