2017-08-29 67 views
2

設防抱怨下面的代碼的情況下,正確關閉資源流:如何在異常

protected void doStuff() throws Exception{ 
    try (CSVReader csvReader = new CSVReader(new FileReader(file))) { 
     ... 
     String[] read; 
     read = csvReader.readNext(); 
     ... 
    } 
} 
在的FileReader拋出一個異常的情況下

。即時通訊新的Java,它不清楚爲什麼與資源塊嘗試不處理案件。如何處理這個?

+2

它的確如此。 Fortify只是錯誤的(除非CSVReader在關閉時沒有關閉它的wrapper,這會令人驚訝)。 –

+2

@JBNizet或在構建'CSVReader'期間拋出異常。 –

+1

'fortify'可能太老了,無法理解*嘗試使用資源* - 不熟悉它。 Java-6中的構造將會失敗。 – OldCurmudgeon

回答

0

首先關閉較低級別的reader實例並關閉包裝級別實例以避免內存泄漏總是一個好主意。

因此先關閉fileReader的實例,然後關閉CSVReader的實例 。

FileReader fileReader= new FileReader(file) 
CSVReader csvReader = new CSVReader(fileReader) 


.... 
... 
fileReader.close(); 
csvReader.close();