当我试图从java代码中删除tomcat服务器conf / Catalina / localhost中存在的文件时,file.delete()总是返回false。但是,如果我通过 file.exists() 函数检查文件,它会返回 true。我没有任何例外。请帮助我们为什么会发生这种情况。解决方案是什么?
7 回答
无法删除文件的原因有很多;它可能不存在,它可能是一个非空目录,您可能没有关闭所有使用它的资源,并且您的程序可能没有这样做的权限,仅举几例。
不幸的是,该File.delete()
方法提供的关于原因的信息非常少;这几乎取决于您四处寻找并弄清楚。但有好消息;你不想一开始就使用File
。
Java 7 引入了新的java.nio.file
包,它是一个更加健壮的文件访问 API。它提供了抽象的概念Path
并将具体操作分离到Files
类中,特别是它提供了Files.delete()
记录以引发明确的异常,描述删除可能失败的原因。
使用Path
和Files
; 你会很高兴你做到了。
当我试图从java代码中删除tomcat服务器conf / Catalina / localhost中存在的文件时,file.delete()总是返回false。但是,如果我通过 file.exists() 函数检查文件,它会返回 true。
很可能您没有删除服务器上文件的权限。检查您的权限。
f.delete()
返回 false 表示它不是/不能被删除并f.exists()
返回 true 所以文件存在但不能被删除。
您必须先关闭流,然后才能将其删除。
例如 -
fileInputStream.close();
file.delete();
如果目录非空,则File.delete()
方法将返回 false 而不会引发错误。
您必须在删除之前清理目录。
这意味着该文件存在,但您的 java 进程没有删除该文件的权限。这就是删除函数返回 false 的原因
Returns:
true if and only if the file or directory is successfully deleted; false otherwise
在删除文件之前,您应该关闭所有文件读写连接,在 100% 文件将被删除后,例如 buffedreader.close() outputstream.close()
尝试使用 临时删除文件java.nio.Files.delete
,添加 try/catch 块;执行,看看抛出了什么异常...