【问题标题】:java file.delete() returns false but file.exists() returns truejava file.delete() 返回 false 但 file.exists() 返回 true
【发布时间】:2013-02-26 12:14:49
【问题描述】:

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

【问题讨论】:

  • 如果 file.delete() 返回 false,则表示它没有被删除。所以 file.exists() 将返回 true。没有错
  • 检查文件权限。
  • 文件存在,但无法删除。就是这样。
  • 你要关闭输入流
  • 我得到了解决方案。实际上在创建文件时出现了错误。错误地我忘记关闭 FileStream。谢谢大家的建议。

标签: java file delete-file


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我拥有服务器的完全权限。如果我试图删除同一个文件,有时文件被删除但最大时间无法删除并且函数返回 false。
    • 有没有其他方法或库可以帮助解决这个问题。因为我需要使用代码删除文件。
    • @vishal 所以有时会被删除,有时不会。这是非常“好奇”的事情。所以尝试完全重启服务器也可以检查Apache Commons IO library(FileUtils 类)
    • 我已经多次重启服务器了。实际上我正在做的是我在 conf/Catalina/localhost 中动态创建一个 xml 文件,以动态分配不同的 url 以指向同一个应用程序。现在只通过代码我想根据需要删除一些 xml。然后我遇到了这个问题。
    • 我得到了解决方案。实际上创建文件时出错。错误地我忘记关闭文件流。谢谢你的建议。
    【解决方案3】:

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

    例如 -

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 那么请告诉我如何为java进程分配删除文件的权限。因为无论如何我都必须通过代码删除文件。
        【解决方案6】:

        删除文件前应关闭所有文件读写连接,100%文件将被删除 例如 buffedreader.close() 输出流.close()

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2010-11-02
            • 1970-01-01
            • 2021-06-10
            • 2011-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-29
            相关资源
            最近更新 更多