Продолжить чтение 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, оба цикла завершаются по желанию.