19

当我试图从java代码中删除tomcat服务器conf / Catalina / localhost中存在的文件时,file.delete()总是返回false。但是,如果我通过 file.exists() 函数检查文件,它会返回 true。我没有任何例外。请帮助我们为什么会发生这种情况。解决方案是什么?

4

7 回答 7

18

无法删除文件的原因有很多;它可能不存在,它可能是一个非空目录,您可能没有关闭所有使用它的资源,并且您的程序可能没有这样做的权限,仅举几例。

不幸的是,该File.delete()方法提供的关于原因的信息非常少;这几乎取决于您四处寻找并弄清楚。但有好消息;你不想一开始就使用File

Java 7 引入了新的java.nio.file包,它是一个更加健壮的文件访问 API。它提供了抽象的概念Path并将具体操作分离到Files类中,特别是它提供了Files.delete()记录以引发明确的异常,描述删除可能失败的原因。

使用PathFiles; 你会很高兴你做到了。

于 2015-03-05T05:24:54.630 回答
16

当我试图从java代码中删除tomcat服务器conf / Catalina / localhost中存在的文件时,file.delete()总是返回false。但是,如果我通过 file.exists() 函数检查文件,它会返回 true。

很可能您没有删除服务器上文件的权限。检查您的权限。

f.delete()返回 false 表示它不是/不能被删除并f.exists()返回 true 所以文件存在但不能被删除。

于 2013-03-11T10:45:47.787 回答
8

您必须先关闭流,然后才能将其删除。

例如 -

fileInputStream.close();
file.delete();
于 2016-07-05T13:46:30.790 回答
3

如果目录非空,则File.delete()方法将返回 false 而不会引发错误。

您必须在删除之前清理目录。

于 2017-05-09T07:06:59.473 回答
0

这意味着该文件存在,但您的 java 进程没有删除该文件的权限。这就是删除函数返回 false 的原因

Returns: true if and only if the file or directory is successfully deleted; false otherwise

于 2013-03-11T10:47:48.997 回答
0

在删除文件之前,您应该关闭所有文件读写连接,在 100% 文件将被删除后,例如 buffedreader.close() outputstream.close()

于 2019-10-08T16:52:13.953 回答
0

尝试使用 临时删除文件java.nio.Files.delete,添加 try/catch 块;执行,看看抛出了什么异常...

于 2020-03-31T09:57:03.637 回答