2017-08-29 64 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();