无法通过Java删除目录。

16
在我的应用程序中,我已经编写了删除驱动器中目录的代码,但是当我检查File的删除函数时,它并没有删除文件。我写了类似这样的东西。
//Code to delete the directory if it exists
File directory = new File("c:\\Report\\");
if(directory.exists())
    directory.delete(); 

目录未被使用:仍然无法删除该目录。

1
你必须首先删除目录的内容——但是如果使用空目录仍然无法工作,那么这是因为你正在Windows上运行,而该目录被锁定,因为有东西正在查看该目录(或当前目录设置为该目录)。 - Luke Hutchison
5个回答

25

在Java中,只有空目录才能被删除,这导致了以下类似的方法:

/**
 * Force deletion of directory
 * @param path
 * @return
 */
static public boolean deleteDirectory(File path) {
    if (path.exists()) {
        File[] files = path.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                deleteDirectory(files[i]);
            } else {
                files[i].delete();
            }
        }
    }
    return (path.delete());
}

即使目录非空,此代码也可以删除您的文件夹,而不会出现问题(除非该目录被操作系统锁定)。


无法工作...如果(files.length==0),即如果path.listFiles()不包含任何文件,则根据您的代码无法删除目录。 - Rishav Singla

22

喜欢有已经写好的东西。完全同意。谢谢提醒。 - Aaron
FileUtils#deleteDirectory和FileUtils#forceDelete实现也会递归删除... - Dmitry Mitskevich

4

查看文档:

如果此路径名表示目录,则必须清空该目录才能删除。

您确定该目录为空(包括隐藏文件)吗?


3

删除目录时必须为空。如果不为空,则需要使用File.listFiles()和File.delete()递归删除。


1

除了目录不为空之外,还有两种可能性:

  • 运行Java程序的用户没有该目录的写入/删除权限
  • 该目录被另一个进程使用/锁定(您写道它没有被锁定,但您如何确认?)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接