我使用Spring批处理的ItemReader来读取文件
我的输入文件包含由,
分隔的长字符串列表,如下所示:
2333,443445,5555,3344...
每个字符串都应该转换为对象。
我如何为此自定义ItemReader?
据我所知,默认情况下我可以为列设置分隔符,但我只有一列和我的
分隔符(,
)并不是要分隔列,而是要分隔记录。
我如何将每个字符串映射到该对象:
public class MyItemDTO{
private String itemId;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId= itemId;
}
答案 0 :(得分:1)
在您描述的用例中不需要自定义ItemReader
。使用FlatFileItemReader
,您可以指定自定义RecordSeparatorPolicy
。默认情况下,使用的策略用新行字符分隔(一行=一个记录)。但是,在您的情况下,它将由,
分隔。您可以在此处详细了解javadoc中的RecordSeparatorPolicy
:http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/separator/RecordSeparatorPolicy.html
答案 1 :(得分:0)
我使用了以下Groovy
代码:
new FlatFileItemReader(
resource: new FileSystemResource(filePath),
lineMapper: new DefaultLineMapper(
lineTokenizer: new DelimitedLineTokenizer(
delimiter: ',',
names: ['itemId']
),
fieldSetMapper: new BeanWrapperFieldSetMapper(
targetType: MyItemDTO
)
)
)
使用表示要读取的文件路径的字符串重新加载filepath
。
答案 2 :(得分:0)
use DelimitedLineTokenizer class
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setDelimiter(",");
without delimiter use FixedLengthTokenizer class
FixedLengthTokenizer tokenizer = new FixedLengthTokenizer();
tokenizer.setNames( new String[]{"val1", "val2"} );
tokenizer.setColumns( new Range[]{new Range( 1, 4 ),new Range( 5, 10 )} );