如何使用ItemReader将文件映射到行之间没有分隔符的对象

时间:2014-12-30 17:10:35

标签: java spring spring-batch

我使用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;
}

3 个答案:

答案 0 :(得分:1)

在您描述的用例中不需要自定义ItemReader。使用FlatFileItemReader,您可以指定自定义RecordSeparatorPolicy。默认情况下,使用的策略用新行字符分隔(一行=一个记录)。但是,在您的情况下,它将由,分隔。您可以在此处详细了解javadoc中的RecordSeparatorPolicyhttp://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 )} );