如何删除java中方法出口上的文件?

时间:2013-08-28 13:38:43

标签: java file delete-file

我试图弄清楚如何确保在方法返回时删除在方法中创建的临时文件。我试过了file.deleteOnExit();,但那是在程序停止时,而不是方法。我还尝试了tryfinally块。使用finally块是实现此目的的唯一方法吗?

public String example(File file) {
    // do some random processing to the file here
    file.canWrite();
    InputStream() is = new FileInputStread(file);
    // when we are ready to return, use the try finally block
    try {
        return file.getName();
    } finally {
        is.close();
        file.delete();
    }
}

我觉得它看起来很难看。有人有建议吗?

4 个答案:

答案 0 :(得分:3)

那就是finally的用途。

当然,在Java 7中,您可以编写一个AutoCloseable实现,为您执行删除操作,并使用try-with-resources代替。

答案 1 :(得分:2)

如果您使用的是Java 7,则可以使用java.lang.AutoCloseable接口实现此目的。详情请http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

如果没有,那么最终是关闭/清理资源的最佳和广泛使用的方法。

答案 2 :(得分:2)

正如@BackSlash在您的具体情况中提到的那样,您可以在返回之前删除文件:

file.delete();
return "File processed!";

但是通常情况下,如果try块中的代码可以抛出异常,那么你的方法看起来很好。您也可以使用面向方面编程(例如使用AspectJ),但在您的情况下看起来有点过分。

您还可以使用Java 7的新功能来改进您的代码。Closable的每个实例都将在try块的末尾关闭,例如:

try (
    InputStream in = ...
) {
    // read from input stream.
}

// that's it. You do not have to close in. It will be closed automatically since InputStream implements Closable. 

因此,您可以创建包装AutoDeletableFile并实现File的类Closableclose()方法应删除该文件。在此代码中,您的工作方式与您的完全相同:

try (
    AutoDeletableFile file = new AutoDeletableFile("myfile.txt");
) {
    // deal with file
}
// do nothing here. The file will be deleted automatically since its close() method actually deletes the file. 

答案 3 :(得分:0)

也许尝试删除方法末尾的文件(最后一行)?如果我理解正确,这将在方法退出之前删除文件吗?

File file = new File("file.txt");
file.delete();