diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/ResourceLineReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/ResourceLineReader.java index 482593333..40d471471 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/ResourceLineReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/ResourceLineReader.java @@ -50,14 +50,37 @@ public class ResourceLineReader extends AbstractItemCountingItemStreamItemRea private LineMapper lineMapper; + private int linesToSkip = 0; + + private LineCallbackHandler skippedLinesCallback; + public ResourceLineReader() { setName(ClassUtils.getShortName(FlatFileItemReader.class)); } + /** + * skippedLinesCallback will be passed the header line before any items are read. + */ + public void setSkippedLinesCallback(LineCallbackHandler skippedLinesCallback) { + this.skippedLinesCallback = skippedLinesCallback; + } + + /** + * 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. + * + * @param linesToSkip the number of lines to skip + */ + public void setLinesToSkip(int linesToSkip) { + this.linesToSkip = linesToSkip; + } + /** * Setter for line mapper. This property is required to be set. * @param lineMapper maps line to item - */ + */ public void setLineMapper(LineMapper lineMapper) { this.lineMapper = lineMapper; } @@ -189,7 +212,10 @@ public class ResourceLineReader extends AbstractItemCountingItemStreamItemRea } reader = new BufferedReader(new InputStreamReader(resource.getInputStream(), encoding)); - + for (int i = 0; i < linesToSkip; i++) { + String line = readLine(); + skippedLinesCallback.handleLine(line); + } } public void afterPropertiesSet() throws Exception { diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderCommonTests.java similarity index 91% rename from spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderTests.java rename to spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderCommonTests.java index 6c25d5f25..cee877aaf 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/ResourceLineReaderCommonTests.java @@ -11,7 +11,7 @@ import org.springframework.core.io.Resource; /** * Tests for {@link ResourceLineReader}. */ -public class ResourceLineReaderTests extends CommonItemStreamItemReaderTests{ +public class ResourceLineReaderCommonTests extends CommonItemStreamItemReaderTests{ private static final String FOOS = "1 \n 2 \n 3 \n 4 \n 5 \n";