Skip to content

Commit b11d49a

Browse files
committed
Allow whitespace characters as delimiters in FlatFileItemReader
Resolves BATCH-2738
1 parent 34ec7ee commit b11d49a

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ public DelimitedLineTokenizer build() {
628628

629629
tokenizer.setNames(this.names.toArray(new String[this.names.size()]));
630630

631-
if(StringUtils.hasText(this.delimiter)) {
631+
if(StringUtils.hasLength(this.delimiter)) {
632632
tokenizer.setDelimiter(this.delimiter);
633633
}
634634

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilderTests.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.batch.item.file.FlatFileItemReader;
2525
import org.springframework.batch.item.file.separator.DefaultRecordSeparatorPolicy;
2626
import org.springframework.batch.item.file.transform.DefaultFieldSet;
27+
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
2728
import org.springframework.batch.item.file.transform.FieldSet;
2829
import org.springframework.batch.item.file.transform.FieldSetFactory;
2930
import org.springframework.batch.item.file.transform.Range;
@@ -85,6 +86,44 @@ public void testSimpleDelimited() throws Exception {
8586
assertNull(reader.read());
8687
}
8788

89+
@Test
90+
public void testSimpleDelimitedWithWhitespaceCharacter() throws Exception {
91+
FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>()
92+
.name("fooReader")
93+
.resource(getResource("1 2 3"))
94+
.delimited()
95+
.delimiter(" ")
96+
.names(new String[] {"first", "second", "third"})
97+
.targetType(Foo.class)
98+
.build();
99+
100+
reader.open(new ExecutionContext());
101+
Foo item = reader.read();
102+
assertEquals(1, item.getFirst());
103+
assertEquals(2, item.getSecond());
104+
assertEquals("3", item.getThird());
105+
assertNull(reader.read());
106+
}
107+
108+
@Test
109+
public void testSimpleDelimitedWithTabCharacter() throws Exception {
110+
FlatFileItemReader<Foo> reader = new FlatFileItemReaderBuilder<Foo>()
111+
.name("fooReader")
112+
.resource(getResource("1\t2\t3"))
113+
.delimited()
114+
.delimiter(DelimitedLineTokenizer.DELIMITER_TAB)
115+
.names(new String[] {"first", "second", "third"})
116+
.targetType(Foo.class)
117+
.build();
118+
119+
reader.open(new ExecutionContext());
120+
Foo item = reader.read();
121+
assertEquals(1, item.getFirst());
122+
assertEquals(2, item.getSecond());
123+
assertEquals("3", item.getThird());
124+
assertNull(reader.read());
125+
}
126+
88127
@Test
89128
public void testAdvancedDelimited() throws Exception {
90129
final List<String> skippedLines = new ArrayList<>();

0 commit comments

Comments
 (0)