Java 如何使用ItemReader将文件映射到行与行之间没有分隔符的对象
我正在使用SpringBatch的ItemReader读取文件 我的输入文件包含由Java 如何使用ItemReader将文件映射到行与行之间没有分隔符的对象,java,spring,spring-batch,Java,Spring,Spring Batch,我正在使用SpringBatch的ItemReader读取文件 我的输入文件包含由分隔的字符串的长列表,如下所示: 2333,443445,5555,3344... 每个字符串都应该转换为对象 我如何定制ItemReader呢 我知道默认情况下我可以为列设置分隔符,但我只得到一列和 分隔符(,)不是用来分隔列,而是用来分隔记录 如何将每个字符串映射到该对象中: public class MyItemDTO{ private String itemId; public String ge
分隔的字符串的长列表,
如下所示:
2333,443445,5555,3344...
每个字符串都应该转换为对象
我如何定制ItemReader呢
我知道默认情况下我可以为列设置分隔符,但我只得到一列和
分隔符(,
)不是用来分隔列,而是用来分隔记录
如何将每个字符串映射到该对象中:
public class MyItemDTO{
private String itemId;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId= itemId;
}
在您所描述的用例中,不需要定制
ItemReader
。使用FlatFileItemReader
,您可以指定自定义RecordSeparatorPolicy
。默认情况下,使用的策略由新行字符分隔(一行=一条记录)。但是,在您的情况下,它将由,
分隔。您可以在这里的javadoc中阅读有关RecordSeparatorPolicy
的更多信息:我使用了以下Groovy
代码:
new FlatFileItemReader(
resource: new FileSystemResource(filePath),
lineMapper: new DefaultLineMapper(
lineTokenizer: new DelimitedLineTokenizer(
delimiter: ',',
names: ['itemId']
),
fieldSetMapper: new BeanWrapperFieldSetMapper(
targetType: MyItemDTO
)
)
)
使用表示要读取的文件路径的字符串重新播放
filepath
。您好,我读过相关内容,但仍然无法通过一个工作示例来理解。你介意给我举个例子吗?虽然这个代码片段可以解决这个问题,但它确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
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 )} );