当我们需要关闭输出流时,有两种选择。
try {
close(out)
} catch(IOException e) {
}
try {
close(out)
} catch(IOException e) {
throw anException;
}
众所周知,关闭时输出流将在文件末尾写入一个/几个字符,如果这些写错了,文件也将无法正确打开,例如ZipoutputStream。
如果使用第一个,则会有失败关闭的风险。
如果使用第二个,它将使我的代码不友好。
有人可以给我一些建议吗?
非常抱歉无法清楚地描述此问题。
我的意思是如何安全地进行IO操作。如果资源释放失败,则会通知调用方。
感谢您的所有答复。尤其要感谢@Don Roby给我的链接,其中包含@Fabian Barney回答的最佳答案
最佳答案
由于Java 7 IOUtils.closeQuietly
已过时,并且唯一合理的解决方案是try-with-resources
,它可以自动关闭资源
try (InputStream is = new FileInputStream(file)) {
...
}
请注意,它还解决了正确打开/关闭多个资源的问题
try (InputStream is = new FileInputStream(infile); OutputStream out = new FileOutputStream(outfile)) {
...
}
而且它也不会抑制
close()
可能引发的IOException,这正是closeQuietly
所做的。