Allow whitespace characters as delimiters in FlatFileItemReader

Resolves BATCH-2738
This commit is contained in:
Mahmoud Ben Hassine
2018-08-09 12:16:36 +02:00
parent 34ec7ee9fc
commit b11d49afd3
2 changed files with 40 additions and 1 deletions

View File

@@ -628,7 +628,7 @@ public class FlatFileItemReaderBuilder<T> {
tokenizer.setNames(this.names.toArray(new String[this.names.size()]));
if(StringUtils.hasText(this.delimiter)) {
if(StringUtils.hasLength(this.delimiter)) {
tokenizer.setDelimiter(this.delimiter);
}

View File

@@ -24,6 +24,7 @@ import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.separator.DefaultRecordSeparatorPolicy;
import org.springframework.batch.item.file.transform.DefaultFieldSet;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.transform.FieldSet;
import org.springframework.batch.item.file.transform.FieldSetFactory;
import org.springframework.batch.item.file.transform.Range;
@@ -85,6 +86,44 @@ public class FlatFileItemReaderBuilderTests {
assertNull(reader.read());
}
@Test
public void testSimpleDelimitedWithWhitespaceCharacter() throws Exception {
FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>()
.name("fooReader")
.resource(getResource("1 2 3"))
.delimited()
.delimiter(" ")
.names(new String[] {"first", "second", "third"})
.targetType(Foo.class)
.build();
reader.open(new ExecutionContext());
Foo item = reader.read();
assertEquals(1, item.getFirst());
assertEquals(2, item.getSecond());
assertEquals("3", item.getThird());
assertNull(reader.read());
}
@Test
public void testSimpleDelimitedWithTabCharacter() throws Exception {
FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>()
.name("fooReader")
.resource(getResource("1\t2\t3"))
.delimited()
.delimiter(DelimitedLineTokenizer.DELIMITER_TAB)
.names(new String[] {"first", "second", "third"})
.targetType(Foo.class)
.build();
reader.open(new ExecutionContext());
Foo item = reader.read();
assertEquals(1, item.getFirst());
assertEquals(2, item.getSecond());
assertEquals("3", item.getThird());
assertNull(reader.read());
}
@Test
public void testAdvancedDelimited() throws Exception {
final List<String> skippedLines = new ArrayList<>();