У меня есть метод, который принимает загруженный плоский файл 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);
}




Потому что вы тестируете его слишком поздно, после того, как уже пытались разыменовать нуль при вызове getName(). Не используйте для этого do/while:
while ((newPs = reader.read()) != null) {
System.out.println("--->"+newPs.getName())
}
do/while- важная языковая конструкция, но вы обнаружите, что используете ее только на 1% чаще, чемwhile/do.