在java中,递归列出所有文件。但跳过一个子目录

时间:2017-12-18 19:58:22

标签: java

我列出了给定目录中的所有文件名(递归)。这包括在子目录中显示文件名。如何限制它不要在一个特定的子目录下显示files / dir(跳过一个特定的目录)

    File file = new File(FILE_PATH);
    // Recursively search for all the resource files.
    Collection files = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (Iterator iterator = files.iterator(); iterator.hasNext();)
    {
        File fileIter = (File) iterator.next();
        System.out.println("File = " + fileIter.getPath());

    }

1 个答案:

答案 0 :(得分:1)

Java SE有自己的方法:Files.walkFileTree。您传递一个FileVisitor(通常是SimpleFileVisitor的子类),其每个方法都可以返回FileVisitResult。要跳过目录,只需返回FileVisitResult.SKIP_SUBTREE:

Files.walkFileTree(file.toPath(),
    new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult preVisitDirectory(Path dir,
                                                 BasicFileAttributes attr)
        throws IOException {
            if (dir.endsWith("forbiddenDir")) {
                return FileVisitResult.SKIP_SUBTREE;
            }
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(Path file,
                                         BasicFileAttributes attr)
        throws IOException {
            System.out.println("File = " + file);
            return FileVisitResult.CONTINUE;
        }
    });

Path类是过时File类的现代替代品。您应该避免使用File,因为它的许多方法都不能正确报告错误。如果您绝对需要File对象,则Path具有toFile()方法。相反,File有一个toPath()方法。