Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 Can';不要删除文件_Java - Fatal编程技术网

Java Can';不要删除文件

Java Can';不要删除文件,java,Java,A有这样一个问题:有一些随机访问文件是通过算法打开的。它们所使用的函数是递归的。因此,我无法关闭它们(如果关闭,我将使算法崩溃)。有没有办法关闭它们(以后删除) 您可以使用,当JVM结束时,文件将自动删除。从打开文件的非递归例程开始,将其传递给递归例程,然后在递归例程退出时关闭它。每个递归函数都必须具有某种中止条件。只需删除递归“结尾”处的文件 顺便说一句,你应该关闭你打开的每个文件,如果你的功能结构不允许你这样做,你应该改变它。根据问题的细节,有很多方法可以解决这个问题: 如果您只有1个文件

A有这样一个问题:有一些随机访问文件是通过算法打开的。它们所使用的函数是递归的。因此,我无法关闭它们(如果关闭,我将使算法崩溃)。有没有办法关闭它们(以后删除)

您可以使用,当JVM结束时,文件将自动删除。

从打开文件的非递归例程开始,将其传递给递归例程,然后在递归例程退出时关闭它。

每个递归函数都必须具有某种中止条件。只需删除递归“结尾”处的文件


顺便说一句,你应该关闭你打开的每个文件,如果你的功能结构不允许你这样做,你应该改变它。

根据问题的细节,有很多方法可以解决这个问题:

  • 如果您只有1个文件,那么使用@Bill K的解决方案,即在进入递归部分之前在非递归例程中打开该文件是一种很好的方法

  • 如果要打开少量文件,请创建一个“文件管理器”类,其中一个方法将按需打开新文件,另一个方法将关闭并删除所有打开的文件。将算法更改为使用文件管理器打开文件,并在try/finally递归算法的finally子句中调用“closeall”方法

  • 如果要打开任意数量的文件,则必须重新设计算法,以便能够以合理的方式按需打开和关闭这些文件。或者更改算法,使其不需要使用这么多文件


@Michael Borgwardt的解决方案(根本不要关闭文件,并在退出时将其标记为delete)可能很脆弱,特别是当算法需要打开大量这些文件时。许多操作系统平台对每个进程打开的文件句柄的数量都有限制。

如果看不到算法,很难判断,但即使使用递归实现,也应该能够在递归返回时关闭它

另一种方法是在递归函数之外打开和关闭文件:

例如:

 main() {
    File file = openFile()
    recursiveFunction( file ); // do whatever is needed and pass the file as arg
    file.close()
  }
或者在递归函数中打开和关闭文件

 void recursiveFunction() {
    File file = openFile()
    doX
    doY
    if( finished() ) { // guard condition executed when returning from the recursion
        closeFile()
    } else {
        recursiveFunction()
    } 
 }

如果他需要清理,但继续运行(例如在服务器或运行时间较长的用户应用程序中),则不会工作。是的,我同意。这只是删除