5

我正在尝试遍历文件树并删除所有文件/目录。代码如下:

        Files.walkFileTree(metricPath, new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file,
                                             BasicFileAttributes attrs) throws IOException {
                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir,
                                                      IOException exc) throws IOException {
                if (exc == null) {
                    Files.delete(dir);
                    return FileVisitResult.CONTINUE;
                } else {
                    throw exc;
                }
            }
        });
    }

此代码在单元测试之间运行,每个单元测试都生成一个单独的文件,格式为folder1/folder2/file. 当我尝试走那棵树时,DirectoryNotEmptyException当 folder1 尝试被删除时抛出 The ,尽管它显然是空的......

4

4 回答 4

0

您是否检查过该目录中的隐藏文件?在 Windows 上,可能是某个进程打开了这个目录并且打开的文件 HANDLE 仍然存在于系统 HANDLE 表中。在这种情况下,目录被锁定,java 可能会抛出该异常。

于 2013-01-10T19:16:55.533 回答
0

正如我在您的代码中看到的那样,应该没有问题,除非一个文件/文件夹处于只读模式。您可能想在删除之前先探索更改文件权限。

您还可以尝试将 Files.delete() 方法放在以下覆盖上吗

public FileVisitResult visitFileFailed(路径文件,IOException exc)

参考: JAVA NIO目录删除

于 2013-08-25T04:33:59.483 回答
0

使用 Apache Commons FileUtils.deleteDirectory() 或 FileUtils.deleteQuietly()

于 2020-03-04T10:23:13.267 回答
-1

或者,您可以导入Apache Commons IO并使用其FileUtils.deleteDirectory(File directory)方法。一行就足够了,因为它会递归地删除所有文件和子目录:

FileUtils.deleteDirectory(dirToBeDeleted);
于 2013-01-10T19:36:30.630 回答