【问题标题】:File.delete doesn't delete fileFile.delete 不删除文件
【发布时间】:2020-11-27 12:33:54
【问题描述】:

在单元测试中,我在临时文件夹中创建了一个文件,测试后我想删除它们。

 @After
    public void destroy() throws IOException {
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file1.tmp").delete()) {
            System.out.println("file1.tmp not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file2.log").delete()) {
            System.out.println("file2.log not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file3.log").delete()) {
            System.out.println("file3.log not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file4.log").delete()) {
            System.out.println("file4.log not deleted");
        }
    }

它可以毫无问题地删除文件 1-3,但我没有删除文件 4。 通常 File.delete 应该抛出一个 IOException 但它只是返回 false。

我对每个文件都使用了相同的方法,创建和写入文件后关闭writer。

希望我没有忘记任何信息

【问题讨论】:

  • File.delete() 不会抛出 IOExceptions。删除失败时返回false。如果您想要一个可能为您提供原因指示的异常,您可以使用 java.nio.Files 类中的 delete() 方法。
  • 是什么让您认为它应该抛出 IOException? docs 没有提到这一点。
  • 现在的问题是什么?为什么它不抛出或为什么文件没有被删除?
  • @fredrik 我读错了“注意”部分。我认为这意味着,像我使用的 delete 方法会引发 IOException。
  • @Henry 我想知道为什么它没有抛出任何东西,抱歉没有直接写这个^^"

标签: java java-io filewriter


【解决方案1】:

通常File.delete 应该抛出一个IOException 但它只会返回 false。

咳咳……

File.delete 在删除文件失败时不会抛出IOException1。它返回false

至于为什么无法删除文件,最可能的解释是:

  • 文件被锁定,因为有东西打开了它。 Windows 不允许您删除已锁定的文件。

  • 应用程序不具备删除到期文件所需的(操作系统级别)访问权限;即这是一个文件或目录权限问题。

如果您想找出删除失败的原因,解决方案是将您的代码更改为使用PathFiles.delete(Path)Files 中的方法被设计为抛出异常。在这种情况下,消息应该给出删除失败的原因。


1 - 该方法被记录为抛出的唯一异常是 SecurityException,只有在 SecurityManager 处于活动状态时才会抛出该异常。

【讨论】:

  • 谢谢,现在我看到了异常。之前是Reader,我没有关闭。非常感谢。抱歉,目前无法投票,需要更多声望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多