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