临时文件未在关闭时删除

时间:2016-02-23 14:12:33

标签: java file-io io java-io

我在一个非常大的应用程序中使用Java,有时我必须使用临时文件。我希望在应用程序关闭时删除这些文件,这是我正在使用的简单快照:

File tempFile = File.createTempFile("sign_", "tmp.pdf");
tempFile.deleteOnExit();

我没有报告所有代码,因为它真的很大,我有很多班级互相工作。我知道哪些可能是避免删除某个文件的关闭的原因(某些文件被删除,其他文件没有被删除,但它们总是来自同一段代码而未被删除的文件。)

编辑:我已经阅读了this example但我认为我需要一些“理论”动机,而不是代码示例来找到原因。

1 个答案:

答案 0 :(得分:1)

方法" deleteOnExit()"仅在VM正常终止时才有效。如果VM崩溃或强制终止,该文件可能会保留未删除状态。

我不知道它是如何实现的,但你可以尝试将tempFile.deleteOnExit()放在finally中。

File tempFile = null; 
try{            
    tempFile = File.createTempFile("sign_", "tmp.pdf");

}catch(IOException e){          
    e.printStackTrace();            
} finally {
    if (tempFile != null) {
        FileUtils.forceDelete(tempFile);
        System.out.println("File deleted");
    }
}

或者,关闭对文件的所有引用,然后调用" File.delete()"立即删除。

如果有人在工作,可能会对文件提出一些参考。通过这种方式,您可以尝试强制使用 org.apache.commons.io.FileUtils 删除要删除的文件。

示例 org.apache.commons.io.FileUtils

File tempFile = null; 
try{            
    tempFile = File.createTempFile("sign_", "tmp.pdf");

}catch(IOException e){          
    e.printStackTrace();            
} finally {
    if (tempFile != null) {
        FileDeleteStrategy.FORCE.delete(tempFile);
        System.out.println("File deleted");
    }
}

示例 org.apache.commons.io.FileDeleteStrategy

ps aux | grep foo.jar | grep -v grep | awk '{print $2}' | xargs kill