これはスタイルとつまらない質問ですが、これに関する意見に興味があります。次のコードを検討してください (問題を回避するために別の関数を使用できることは無視してください)。
FileUtils.copyInputStreamToFile(new FileInputStream(f1), f2);
copyInputStreamToFile
apache.commons.io からのもので、ストリームを閉じます。これは、通常のすべての状況で InputStream を閉じる必要があると考えています。なぜなら、作成時に例外が発生した場合、InputStream
閉じるものは何もなく、内部で例外が発生した場合copyInputStreamToFile
、この関数がストリームを閉じてくれるからです。
InputStream
しかし、 の作成からtry ブロックの開始までの間に例外やエラーが発生しないと想定するのは本当に安全copyInputStreamToFile
でしょうか? OutOfMemoryError
とか、とか、変なこと考えてThreadDeath
ます。したがって、上記のコードを次のように書き直すことができます。
InputStream is = null;
try {
is = new FileInputStream(f1);
FileUtils.copyInputStreamToFile(is, f2);
} finally {
IOUtils.closeQuietly(is);
}
それは安全なはずですが、必要だと思いますか?