2016-03-14 5 views
0

Я использую SuperCSV для разбора CSV-файла. Он работает безупречно. Файл CSV, который я передаю, может содержать некоторые недопустимые записи. В это время можно ли регистрировать, какая строка не обрабатывается?Добавление строки ошибки в журнал при сбое SuperCSV

List<InputBean> csvContentsList = new ArrayList<InputBean>(); 
ICsvBeanReader beanReader = new CsvBeanReader(fileReader, CsvPreference.STANDARD_PREFERENCE); 
InputBean bean = null; 
do { 
    try { 
     bean = beanReader.read(InputBean.class, header, getProcessors()); 
     if (bean != null) 
      csvContentsList.add(bean); 
    } catch (Exception e) { 
     logger.error("Error in parsing the record:"+e.getMessage()); 
    } 
} while (bean != null); 

В этом коде, если файл CSV содержит недопустимую запись, он выдает ошибку и ловится в блоке поймать. Как можно напечатать эту недопустимую запись? или номер строки?

+1

Если вам не нравится ловить исключения, вы также можете осуществить это с помощью процессора клеток, который подавляет и собирает каждый исключение. См. [Здесь] (http://stackoverflow.com/questions/13646982/validate-every-field-in-a-single-pass-with-supercsv/13658467#13658467) для примера. –

ответ

0

Если есть недопустимая строка при обработке файла CSV с beanreader.read(...) методом, то документация говорит, что SuperCsvException брошено, из которого вы можете спросить CsvContext с методом getCsvContext() и от этого вы можете получить все виды контекстной информации, включая номер строки. Поэтому будьте более конкретными в том, что вы поймаете и обработаете.

Связанная документация:

https://super-csv.github.io/super-csv/apidocs/org/supercsv/io/ICsvBeanReader.html

https://super-csv.github.io/super-csv/apidocs/org/supercsv/exception/SuperCsvException.html#getCsvContext--

https://super-csv.github.io/super-csv/apidocs/org/supercsv/util/CsvContext.html

+0

Здесь исключение IllegalArgumentException, поскольку количество столбцов не соответствует ... Во всяком случае спасибо за указатель. – Ram