2016-03-14 47 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文件包含無效記錄,則會引發錯誤並將其捕獲到catch塊中。怎麼可能打印該無效記錄?或者它的行號?

+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

相關問題