这更像是一个风格和挑剔的问题,但我很好奇对此的看法。考虑以下代码(并忽略我可以使用不同的函数来避免该问题):
FileUtils.copyInputStreamToFile(new FileInputStream(f1), f2);
copyInputStreamToFile
来自 apache.commons.io 并将关闭流。我认为这应该在所有常见情况下关闭 InputStream,因为如果在创建时发生异常,InputStream
则没有什么可以关闭,如果内部发生异常,copyInputStreamToFile
那么这个函数将为我关闭流。
InputStream
但是,假设在中创建和开始尝试块之间没有异常或错误真的安全copyInputStreamToFile
吗?我在想不寻常的事情,比如OutOfMemoryError
or ThreadDeath
。因此,我们可以将上面的代码重写为:
InputStream is = null;
try {
is = new FileInputStream(f1);
FileUtils.copyInputStreamToFile(is, f2);
} finally {
IOUtils.closeQuietly(is);
}
那应该是安全的,但你认为有必要吗?