当我尝试从java代码中删除tomcat server conf / Catalina / localhost中存在的文件时,file.delete()始终返回false。但是,如果我通过file.exists()函数检查文件,则返回true。我没有任何例外。请帮助我们为什么会这样。解决方案是什么?
答案 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()
,其被记录以引出明确的异常,描述删除可能失败的原因。
使用Path
和Files
;你很高兴你做到了。
答案 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块;执行,看看抛出了什么异常...