Java 使用FlatFileItemReader读取元素列表
比方说,我有一个对象引擎,唯一的属性是brandName,然后我有一个CSV文件,如下所示:Java 使用FlatFileItemReader读取元素列表,java,csv,spring-batch,Java,Csv,Spring Batch,比方说,我有一个对象引擎,唯一的属性是brandName,然后我有一个CSV文件,如下所示: car_brand; bike_brand; airplane_brand; boat_brand brand1; brand2; brand3; brand4 brand5; brand6; brand7; brand8 brand9; brand10; brand11; brand12 我想做的是读取CSV文件并
car_brand; bike_brand; airplane_brand; boat_brand
brand1; brand2; brand3; brand4
brand5; brand6; brand7; brand8
brand9; brand10; brand11; brand12
我想做的是读取CSV文件并为每一行创建一个列表
因为我的项目是一个Spring批处理项目,所以我想使用一个Reader,但是我该怎么做呢
我试着做:
@Bean
public FlatFileItemReader<Engine> reader() {
FlatFileItemReader<Engine> reader = new FlatFileItemReader<Project>();
reader.setResource(new ClassPathResource("file.csv"));
reader.setLinesToSkip(1);
reader.setLineMapper(new DefaultLineMapper<Project>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(***);
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Project>() {
{
setTargetType(Engine.class);
}
});
}
});
return reader;
}
@Bean
公共FlatFileItemReader()读取器{
FlatFileItemReader=新的FlatFileItemReader();
setResource(新类路径资源(“file.csv”);
reader.setLinesToSkip(1);
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(新的DelimitedLineTokenizer(){
{
集合名(***);
}
});
setFieldSetMapper(新的BeanRapperFieldSetMapper(){
{
setTargetType(发动机等级);
}
});
}
});
返回读取器;
}
通常您只使用读卡器创建一个对象,如何使用读卡器创建列表?我是否应该将方法类型更改为
- >
编辑:
我的问题不是如何制作列表的阅读器,而是如何制作列表的FlatFileItemReader,重复的问题不是我需要的答案。您可以尝试以下内容:
@Bean
LineMapper<List<Engine>> lineMapper() {
return new LineMapper<List<Engine>>() {
@Override
public <List<Engine>> mapLine(String line, int lineNum) throws Exception {
String[] tokens = line.split(";");
if (tokens.length < 1) {
throw new DataIntegrityViolationException("Expecting at least one token in input line: " + line);
}
List<Engine> data = new ArrayList<Engine>;
for (String token : tokens) {
data.add(Engine.of(token));
}
return data;
}
};
}
@Bean
线条映射器线条映射器(){
返回新的LineMapper(){
@凌驾
公共映射行(字符串行,int-lineNum)引发异常{
String[]tokens=line.split(“;”);
如果(标记长度<1){
抛出新的DataIntegrityViolationException(“输入行:“+行中应至少有一个令牌”);
}
列表数据=新的ArrayList;
for(字符串标记:标记){
data.add(Engine.of(token));
}
返回数据;
}
};
}
FlatFileItemReader itemReader=新的FlatFileItemReader();
itemReader.setLineMapper(lineMapper);
我将制作方法并检查其是否有效,感谢您的帮助@Mahmoud Ben Hassine的可能副本我不认为它们是重复的,我编辑了问题。
FlatFileItemReader<List<Engine>> itemReader = new FlatFileItemReader<>();
itemReader.setLineMapper(lineMapper);