2015-10-01 19 views
1

在拋出單元處理器異常後,有沒有辦法從CSV中繼續讀取?我試圖從文件中獲取所有好的數據,做我需要的數據,然後向用戶報告存在什麼壞線。例如,如果我有一個只有兩列的文件(名稱,活動)。 Name只是一個字符串,active是一個布爾值。在我的CellProcessors列表中都不是可選的。如果單個行對於活動列有空,我想繼續處理這些行。繼續SuperCSV異常後讀取

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

在這種情況下,4號線瑪麗將失敗。我希望繼續閱讀第5行。所有示例都顯示使用while循環閱讀,直到EoF,而且我沒有看到獲取當前行數的方法,所以我可以使用帶有內部try/catch塊的for循環。

回答

1

做了一些測試我自己,我想出了一個解決方法。這當然不是理想的。我希望在上個月的Git問題中提到的tryRead或hasNext版本已經實現,但直到那時纔會起作用。

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任何問題,所以做,而所有後續的迭代繼續從下一行中讀取數據,如果有的話。當達到EoF時,兩個循環都會根據需要終止。