无法通过Java删除目录

问题描述 投票:0回答:5

在我的应用程序中,我编写了从驱动器中删除目录的代码,但是当我检查文件的删除功能时,它并没有删除该文件。我写过这样的东西

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

该目录未被使用,但无法删除该目录

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

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


22
投票

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

FileUtils.deleteDirectory(dir);

FileUtils.forceDelete(dir);

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


3
投票

查看文档:

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

您是否确保该目录为空(也没有隐藏文件)?


2
投票

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


1
投票

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

  • 运行java程序的用户没有该目录的写入/删除权限
  • 该目录被不同的进程使用/锁定(您写道它不是,但您如何确认这一点?)
© www.soinside.com 2019 - 2024. All rights reserved.