如何在java中删除方法出口上的文件?
我试图弄清楚如何确保在方法返回时删除在方法中创建的临时文件。我已尝试file.deleteOnExit;,但这是程序停止时使用的,而不是方法。我也尝试了一次尝试,最终阻止。使用finally块是实现这一点的唯一方法吗如何在java中删除方法出口上的文件?,java,file,delete-file,Java,File,Delete File,我试图弄清楚如何确保在方法返回时删除在方法中创建的临时文件。我已尝试file.deleteOnExit;,但这是程序停止时使用的,而不是方法。我也尝试了一次尝试,最终阻止。使用finally块是实现这一点的唯一方法吗 public String example(File file) { // do some random processing to the file here file.canWrite(); InputStream() is = new FileInpu
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();
}
}
我觉得它看起来很丑。有人有什么建议吗?好吧,这就是最终的目的
当然,在Java7中,您可以编写一个可自动关闭的实现,为您执行删除操作,并使用try with resources来代替
当然,在Java7中,您可以编写一个自动关闭的实现,为您执行删除操作,并使用try with resources。如果您使用的是Java 7,则可以使用Java.lang.AutoCloseable接口来实现这一点。详情请看这里
如果没有,那么finally是关闭/清理资源的最佳且广泛使用的方法。如果您使用的是Java 7,则可以通过使用Java.lang.AutoCloseable接口来实现这一点。详情请看这里
如果没有,那么finally是关闭/清理资源的最佳且广泛使用的方法。正如@backslax在您的具体案例中提到的,您可以在返回之前删除文件:
file.delete();
return "File processed!";
然而,在一般情况下,若try块中的代码可以抛出异常,那个么您的方法看起来很好。您也可以使用面向方面的编程,例如使用AspectJ,但在您的情况下,这看起来有些过分
您还可以通过使用Java7的新特性来改进代码。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来包装文件并实现Closable。close方法应该删除该文件。在此代码中,将与您的代码完全相同:
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.
正如@backslax在您的具体案例中提到的,您可以在返回之前删除文件:
file.delete();
return "File processed!";
然而,在一般情况下,若try块中的代码可以抛出异常,那个么您的方法看起来很好。您也可以使用面向方面的编程,例如使用AspectJ,但在您的情况下,这看起来有些过分
您还可以通过使用Java7的新特性来改进代码。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来包装文件并实现Closable。close方法应该删除该文件。在此代码中,将与您的代码完全相同:
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.
也许尝试删除方法最后一行末尾的文件?如果我理解正确,这将在方法退出之前删除文件
File file = new File("file.txt");
file.delete();
也许尝试删除方法最后一行末尾的文件?如果我理解正确,这将在方法退出之前删除文件
File file = new File("file.txt");
file.delete();
为什么不能在return语句之前删除该文件?在finally block中关闭然后删除该文件有什么问题?@BackSlash I can,但我想知道如何在方法退出时执行此操作。@StephenD:return语句通常不是方法的结尾吗?@jeroenvanevel在使用finally时不是。为什么不能在return语句之前删除文件?在finally block中关闭然后删除文件有什么问题吗?@BackSlash我可以,但我想知道如何在方法退出时执行此操作。@StephenD:return语句通常不是方法的结束吗?@jeroenvanevel在使用finally时不是。您可以给我指一个自动关闭功能删除临时文件的引用吗?这是我第一次听说……你能给我指一下自动关闭功能删除临时文件的参考资料吗?这是我第一次听说。。。。