Java nio-无法删除已清空的目录

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

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

        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。当我尝试走那棵树时,尝试删除folder1时会抛出DirectoryNotEmptyException,尽管它显然是空的...

java io nio
4个回答
0
投票

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


0
投票

正如我在您的代码上看到的那样,应该没有问题,除非一个文件/文件夹处于只读模式。您可能需要先尝试更改文件权限,然后再删除。


0
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.