Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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 - Fatal编程技术网

Java 执行操作后无法删除文件

Java 执行操作后无法删除文件,java,Java,即使在关闭相应的读写器后,也无法删除文件。 文件上存在权限 file.delete()返回false 我的代码 我猜想是这样的:您关闭了FileInputStream,但保持了BufferedReader的打开状态,这会使文件句柄保留一些内容。然后,当您尝试删除该文件时,它会返回false,因为其他文件有句柄 请尝试以下代码: File file = new File(path); try { br = new BufferedReader(new FileReader(file));

即使在关闭相应的读写器后,也无法删除文件。 文件上存在权限 file.delete()返回false 我的代码

我猜想是这样的:您关闭了
FileInputStream
,但保持了
BufferedReader
的打开状态,这会使文件句柄保留一些内容。然后,当您尝试删除该文件时,它会返回
false
,因为其他文件有句柄

请尝试以下代码:

File file = new File(path);
try {
    br = new BufferedReader(new FileReader(file));

    // use the reader ...
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (br != null) br.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// now close the file
file.delete();
更新:

在测试上面的代码时,我注意到了其他一些东西,它们也可能导致您看到的观察结果。如果路径处的文件不存在,则逻辑调用file.delete也会因此失败。因此,在尝试删除该文件之前,应该确保该文件确实存在。您可以调用
file.exists()
来检查这一点。

我想发生的事情是,您关闭了
FileInputStream
,但保持了
BufferedReader
打开,这会使文件句柄保留一些内容。然后,当您尝试删除该文件时,它会返回
false
,因为其他文件有句柄

请尝试以下代码:

File file = new File(path);
try {
    br = new BufferedReader(new FileReader(file));

    // use the reader ...
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (br != null) br.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// now close the file
file.delete();
更新:


在测试上面的代码时,我注意到了其他一些东西,它们也可能导致您看到的观察结果。如果路径处的文件不存在,则逻辑调用file.delete也会因此失败。因此,在尝试删除该文件之前,应该确保该文件确实存在。您可以调用
file.exists()
来检查这一点。

首先,您应该关闭
BufferedReader
,而不是
FileReader
BufferedReader
将依次调用
FileReader
上的
close()
):

因此,不是:

reader.close(); //close reader
做:

(并省略完整的多余注释)

另外,由于
File.delete()
只是返回一个布尔值,并且不会告诉您失败的原因,因此您可以通过调用
Files.delete来获取更多信息:

try {
    Files.delete(file.toPath());
} catch (IOException e) {
    // e now contains information about why it can't delete.
}

首先,您应该关闭
BufferedReader
而不是
FileReader
BufferedReader
将依次调用
FileReader
上的
close()
):

因此,不是:

reader.close(); //close reader
做:

(并省略完整的多余注释)

另外,由于
File.delete()
只是返回一个布尔值,并且不会告诉您失败的原因,因此您可以通过调用
Files.delete来获取更多信息:

try {
    Files.delete(file.toPath());
} catch (IOException e) {
    // e now contains information about why it can't delete.
}


调用
System.gc(),什么都不起作用

调用
System.gc(),什么都不起作用

如果在删除之前调用
file.exists()
会发生什么?不要使用DataInputStream读取文本。你不需要它,如果你需要的话会让人困惑。。使用
BufferedReader br=new BufferedReader(new FileReader(path))
要简单得多。BufferedReader对象初始化语句的形式为:
BufferedReader br=new BufferedReader(new InputStreamReader(new DataInputStream)(new FileInputStream(new File(path‘‘)’))。可以是
DataInputStream d=newdatainputstream(newfileinputstream(newfile(path))。旁注:由于JavaSE7 Java.io.File被认为是遗留API。考虑使用NIO。2文件API。边注:使用资源尝试正确地关闭流。如果在删除之前调用“代码>文件”。你不需要它,如果你需要的话会让人困惑。。使用
BufferedReader br=new BufferedReader(new FileReader(path))
要简单得多。BufferedReader对象初始化语句的形式为:
BufferedReader br=new BufferedReader(new InputStreamReader(new DataInputStream)(new FileInputStream(new File(path‘‘)’))。可以是
DataInputStream d=newdatainputstream(newfileinputstream(newfile(path))。旁注:由于JavaSE7 Java.io.File被认为是遗留API。考虑使用NIO。2文件API。边注:使用资源尝试正确关闭您的StudiSIT不关闭甚至now@arya位于路径
的文件是否已存在?否则,您将无法删除它。它甚至不会关闭now@arya位于路径
的文件是否已存在?如果没有,那么您将无法删除它。欢迎使用SO!请阅读,欢迎来到SO!请阅读,然后