这是在 Java 6 中。
我不止一次看到人们创建临时文件,做一些事情,然后将其重命名为输出文件。一切都包含在一个 try-finally block 中,临时文件在 finally
中被删除,以防中间出现问题。
try {
//do something with tempFile
//do something with tempFile
//do something with tempFile
tempFile.renameTo(outputFile);
}
finally {
if (tempFile.exists())
tempFile.delete()
}
我想知道这样做的好处是什么,而不是直接对输出文件执行某些操作并在出现异常时将其删除。
try {
//do something with outputFile
//do something with outputFile
//do something with outputFile
}
catch (Exception e) {
if (outputFile.exists())
outputFile.delete();
}
我的猜测是,当 try block 可能引发多种异常时,删除 finally
中的临时文件对我有好处。我的猜测对吗?还有什么?
最佳答案
finally
始终执行,而上面的 catch
不会针对派生自 java.lang.Error
的异常执行,而且它会删除无法重命名文件时也会重命名该文件(此操作在失败时不会抛出异常……Java IO 中的一个古老错误)。
关于java - 在 finally 期间删除临时文件与在 catch 期间删除输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595549/