我有很多文本文件,每个文件有很多行,所有行都需要由外部进程同时处理(smooks)。如何将整个文件读入String
或List<String>
(因为有换行符)并将其全部发送到ItemProcessor
?
我尝试过使用
@Bean
public ItemReader<String> reader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
reader.setResource(new ClassPathResource("sample-data.csv"));
reader.setLineMapper(new PassThroughLineMapper());
return reader;
}
但文件中的每一行仍然分别发送到ItemProcessor
,这是有道理的,因为在文档中已经很好地定义了它。我是否试图以无意的方式使用弹簧批次?
编辑:
我正在尝试使用
reader.setRecordSeparatorPolicy(new SimpleRecordSeparatorPolicy(){
@Override
public boolean isEndOfRecord(String line){
if(line.contains("\u001a")){ // EOF character
return true;
}
return false;
}
});
但该文件不包含EOF
个字符。当我手动更改最后一行以包含"end"
并检查line.contains("end")
时,这将按预期工作,并将整个内容发送到ItemProcessor
。我认为我已经走上了正确的道路,需要进行一些调整,但如果某人有最好的做法,那就太棒了。