Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FlatFileItemReader读取元素列表_Java_Csv_Spring Batch - Fatal编程技术网

Java 使用FlatFileItemReader读取元素列表

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文件并

比方说,我有一个对象引擎,唯一的属性是brandName,然后我有一个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);