0

我提交了 Veraocode 安全测试工具的代码,我在下面的代码中得到了这个不正确的资源关闭或释放:

//This function is used to print trace in the in the LogFile for debugging purpose  
PrintWriter f;  
            try {  
                f = new PrintWriter(new BufferedWriter(new FileWriter(fileName,true)));//issue at this line  
                synchronized(this) {  
                    f.println(new StringBuffer(dateString).append("<").append(Thread.currentThread().getName()).append(">").append(traceLog).toString());  
                }  
                f.close();  
                checkFileSize();  
            }catch(IOException e){    
                e.printStackTrace();  
            }   

有人请帮我解决这个问题...

4

3 回答 3

2

You need to close your PrintWriter.

f.close();
于 2013-04-10T11:46:34.513 回答
1
     try {  
            f = new PrintWriter(new BufferedWriter(new FileWriter(fileName,true)));//issue at this line  
            synchronized(this) {  
                f.println(new StringBuffer(dateString).append("<").append(Thread.currentThread().getName()).append(">").append(traceLog).toString());  
            }  

            checkFileSize();  
        }catch(IOException e){    
            e.printStackTrace();  
        } finally {
             if (f != null) {
                 f.close();
             }
        }

资源应该在 finally 子句中关闭。这样他们肯定会被处决。因为如果你把关闭代码放在 try 中,并且在关闭行之前会发生一些异常。资源未正确关闭。

此外,如果您使用的是 JDK-7,请查看 try-with-resources。

于 2013-04-10T11:56:24.117 回答
0

您还需要在 catch 块中关闭 PrintWriter 或创建 finally 块并关闭资源。

}catch(IOException e){    
e.printStackTrace();
f.close();
}

或者

finally {
if (f != null) {
f.close();
}
}
于 2015-11-12T07:21:14.673 回答