在 Java 中以递归方式删除目录

有没有办法在Java中递归删除整个目录?

在正常情况下,可以删除空目录。但是,当涉及到删除带有内容的整个目录时,它不再那么简单了。

如何删除Java中包含内容的整个目录?


答案 1

你应该看看Apache的commons-io。它有一个 FileUtils 类,它将执行所需的操作。

FileUtils.deleteDirectory(new File("directory"));

答案 2

使用Java 7,我们最终可以通过可靠的符号链接检测来做到这一点(我不认为Apache的commons-io目前具有可靠的符号链接检测,因为它不处理Windows上创建的链接。mklink

为了历史的缘故,这里有一个Java 7之前的答案,它遵循符号链接。

void delete(File f) throws IOException {
  if (f.isDirectory()) {
    for (File c : f.listFiles())
      delete(c);
  }
  if (!f.delete())
    throw new FileNotFoundException("Failed to delete file: " + f);
}