File.delete 不删除文件

File.delete doesn't delete file

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

 @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 但它只是 returns false。

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

希望我没有忘记任何信息

Normally File.delete should throw an IOException but it just returns false.

咳咳……

如果

File.delete 无法删除文件 1,则不会抛出 IOException。它returns false.

至于删除文件失败的原因,最可能的解释是:

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

  • 应用程序没有删除文件所需的(OS 级别)权限;即是文件或目录权限问题。

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


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