Плоский файл Spring: блокировать чтение нулевой последней строки

У меня есть метод, который принимает загруженный плоский файл 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);
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что вы тестируете его слишком поздно, после того, как уже пытались разыменовать нуль при вызове getName(). Не используйте для этого do/while:

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

Другие вопросы по теме