无法通过Java删除目录

时间:2010-10-21 13:28:42

标签: java

在我的应用程序中,我编写了从驱动器中删除目录的代码,但是当我检查File的删除功能时,它不会删除该文件。我写了一些像这样的东西

//Code to delete the directory if it exists
File directory = new File("c:\\Report\\");
if(directory.exists())
directory.delete(); 

目录未使用但仍无法删除目录

5 个答案:

答案 0 :(得分:22)

在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());
}

这个文件夹会删除你的文件夹,即使是非空的,也没有麻烦(当这个目录被操作系统锁定时除外)。

答案 1 :(得分:14)

为什么要发明一种带有递归删除方法的轮子?看看apache commons io。 https://commons.apache.org/proper/commons-io/javadocs/api-1.4/

FileUtils.deleteDirectory(dir);

OR

FileUtils.forceDelete(dir);

这就是你所需要的一切。 还有很多有用的方法来操作文件......

答案 2 :(得分:2)

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

递归删除它

答案 3 :(得分:2)

查看文档:

  

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

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

答案 4 :(得分:1)

另外两种可能性(除了目录不为空):

  • 运行java程序的用户没有目录的写/删除权限
  • 该目录由不同的进程使用/锁定(您写的不是,但您是如何确认的?)