java file.delete()返回false但file.exists()返回true

时间:2013-03-11 10:43:11

标签: java file delete-file

当我尝试从java代码中删除tomcat server conf / Catalina / localhost中存在的文件时,file.delete()始终返回false。但是,如果我通过file.exists()函数检查文件,则返回true。我没有任何例外。请帮助我们为什么会这样。解决方案是什么?

7 个答案:

答案 0 :(得分:16)

  

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

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

f.delete()返回false表示它没有/无法删除,f.exists()返回true,因此文件存在但无法删除。

答案 1 :(得分:11)

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

不幸的是,File.delete()方法提供的信息很少,为什么;它非常适合你四处寻找并弄明白。但是有好消息;你不想在第一时间使用File

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

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

答案 2 :(得分:6)

您必须在删除之前关闭该流。

例如 -

fileInputStream.close();
file.delete();

答案 3 :(得分:3)

如果目录非空,那么File.delete()方法将返回false而不会抛出错误。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

在删除文件之前,应先删除所有文件读写连接,然后再删除100%文件 例如                 buffedreader.close()                outputstream.close()

答案 6 :(得分:0)

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