在catch期间删除最终vs删除输出文件期间的临时文件

Rus*_*ell 3 java file-io

这是在Java 6中.

我不止一次见过人们创建临时文件,做某事,然后将其重命名为输出文件.所有内容都包含在try-finally块中,其中临时文件被删除finally,以防万一之间出现问题.

try {
    //do something with tempFile
    //do something with tempFile
    //do something with tempFile
    tempFile.renameTo(outputFile);
}
finally {
    if (tempFile.exists())
        tempFile.delete()
}
Run Code Online (Sandbox Code Playgroud)

我想知道这样做的好处是什么,而不是直接对输出文件做一些事情,如果出现异常则将其删除.

try {
    //do something with outputFile
    //do something with outputFile
    //do something with outputFile
}
catch (Exception e) {
    if (outputFile.exists())
        outputFile.delete();
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是,finally当try块可以抛出多种异常时,删除临时文件会使我受益.我猜对了吗?还有什么?

Aar*_*lla 7

finally总是执行而catch上述不执行上面的异常派生,java.lang.Error它会删除文件,当它无法重命名时(此操作不会在失败时抛出异常... Java IO中的一个古老的错误) .