Продолжить чтение SuperCSV после исключения

Есть ли способ продолжить чтение из CSV после того, как сгенерировано исключение процессора ячейки? Я пытаюсь взять все хорошие данные из файла, сделать с ним то, что мне нужно, и сообщить пользователю о наличии плохих строк, если они есть. Например, если у меня есть файл с двумя столбцами (имя, активный). Имя - это просто строка, а active - логическое значение. Ни один из них не является обязательным в моем списке CellProcessors. Если для активной колонки в одной строке указано значение NULL, я бы хотел продолжить обработку строк после этого.

Name, Active
Bob, 0
John, 1
Mary, 
Harry, 1

В этой ситуации Line 4 Mary потерпит неудачу. Я хочу продолжить чтение до строки 5. Все примеры показывают чтение с циклами while до EoF, и я не вижу способа получить число имеющихся строк, поэтому я могу использовать цикл for с внутренними блоками try/catch.

1 ответ

Сделал некоторые испытания сам, и я нашел обходной путь. Это конечно не идеально. Я надеюсь, что tryRead или версия hasNext, упомянутая в вопросе о Git в прошлом месяце, реализована, но до тех пор это будет работать.

    boolean failed = false;
    do {
        try {
            failed = false;
            while( (myClassBean= beanReader.read(MyClass.class, processors)) != null ) {
                //Process the bean as normal
            }
        }
        catch (SuperCsvCellProcessorException sccpe) {
            //process the exception
            failed = true;
        }
   } while (failed);

Похоже, у читателя бина нет проблем с поддержанием своего места в csv, поэтому все последующие итерации do-while продолжают чтение со следующей строки, если таковые имеются. Когда достигается EoF, оба цикла завершаются по желанию.

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