我在 try/finally 中关闭了文件 Steam,但代码分析警告我:
失败怎么会发生?如何确保 FileStream 已关闭?
public void writeFile(String filepath)
{
BufferedWriter bw = null;
PrintWriter pw = null;
try {
File file = new File(filepath);
bfw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
pw = new PrintWriter(bfw);
//do something
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
bfw.close();
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
最佳答案
查看您的 finally 块:
finally{
try{
bfw.close(); <== exception occured here
pw.close(); <== this is not execute
}catch(Exception e){
e.printStackTrace();
}
}
如果
bfw.close()
发生异常怎么办? pw.close()
永远不会执行。这会导致资源泄漏。有人已经指出在 finally 里面使用 try/catch/finally 。
但是如果你不喜欢看到这么多 try catch 最后,我建议你使用像 Apache Commons IO 这样的库。
解决方案:
try {
........
} finally {
IOUtils.closeQuietly(bfw);
IOUtils.closeQuietly(pw);
}
是的,如果使用 Java 7 或更高版本,您总是有 try-with-resources 。
关于java - 如何解决关闭 FileStream 失败的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49547389/