Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中删除方法出口上的文件?_Java_File_Delete File - Fatal编程技术网

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

如何在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

我试图弄清楚如何确保在方法返回时删除在方法中创建的临时文件。我已尝试file.deleteOnExit;,但这是程序停止时使用的,而不是方法。我也尝试了一次尝试,最终阻止。使用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();
    }
}
我觉得它看起来很丑。有人有什么建议吗?

好吧,这就是最终的目的

当然,在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时不是。您可以给我指一个自动关闭功能删除临时文件的引用吗?这是我第一次听说……你能给我指一下自动关闭功能删除临时文件的参考资料吗?这是我第一次听说。。。。