首页 > 解决方案 > spring flatfile:块读取 null 最后一行

问题描述

我有方法,它接收上传的 csv 平面文件,处理它并打印所有值。

问题是,它仍然尝试在最后一次读取并处理该值并引发 nullpointerexception 错误。我该怎么做。?

在循环结束时,我添加了,while (newPs != null)所以它不应该再处理循环了。

public void readPsFile(MultipartFile batchFile) throws Exception {  
    FlatFileItemReader<ProductService> reader = new FlatFileItemReader<>();
    DelimitedLineTokenizer delimitedTokeniser = new DelimitedLineTokenizer();
    delimitedTokeniser.setNames(new String[]{ "name"});
    DefaultLineMapper<ProductService> lineMapper = new DefaultLineMapper<ProductService>();
    lineMapper.setLineTokenizer(delimitedTokeniser);
    lineMapper.setFieldSetMapper(new BeanWrapperFieldSetMapper<ProductService>() {{setTargetType(ProductService.class);}});
    ByteArrayResource y= new ByteArrayResource(batchFile.getBytes());
    reader.setResource(y);
    reader.setLineMapper(lineMapper);
    reader.setLinesToSkip(1); //do not read the first line of the csv file.
    reader.open(new ExecutionContext());

    reader.open(new ExecutionContext());
    ProductService newPs = null;
    do {
        try {
        newPs = reader.read();
        System.out.println("--->"+newPs.getName());
    }catch(Exception e) {
        e.printStackTrace();
    } while (newPs != null);
}

标签: javaspringspring-bootspring-batch

解决方案


因为在调用getName(). 不要do/while用于此:

while ((newPs = reader.read()) != null) {
    System.out.println("--->"+newPs.getName())
}

推荐阅读