java - 在 finally 期间删除临时文件与在 catch 期间删除输出文件

标签 java file-io

这是在 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/

相关文章:

c - 在 c 中将文本读入缓冲区。 (当文本文件中没有换行符时,省略最后一行数据)

java - 如何使用sx :autocomplter in Struts2 for AJAX purpose?

C++:这是在Windows平台上检查文件存在的最佳方法

java - 在java中使用星号和问号来匹配文件名

java - Jsoup的select返回集合而不是数组

java - 如何检测 zip/压缩文件是否完全解压/解压缩?

c - 如何将文件读入命令行?

java - 使用java单击按钮时交换两个 TextView 值

java - session.save 不返回持久化对象,只返回标识符

java - 如何生成快速排序算法的最坏情况?