简体   繁体   English

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

[英]In java, list all files recursively. but skip one sub-directory

I am listing all the files names in a given directory( recursively). 我列出了给定目录中的所有文件名(递归)。 That includes showing the file names in sub-directories also. 这还包括在子目录中显示文件名。 How I can restrict it to not to show the files/dir under one specific sub-directory (skip one specific directory) 我如何限制它以不显示一个特定子目录下的文件/目录(跳过一个特定目录)

    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());

    }

Java SE has its own method for doing this: Files.walkFileTree . Java SE有其自己的方法: Files.walkFileTree You pass it a FileVisitor (usually a subclass of SimpleFileVisitor), each of whose methods can return a FileVisitResult . 您为其传递了FileVisitor(通常是SimpleFileVisitor的子类),每个方法都可以返回FileVisitResult To skip a directory, simply return FileVisitResult.SKIP_SUBTREE: 要跳过目录,只需返回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;
        }
    });

The Path class is the modern replacement for the obsolete File class. Path类是过时File类的现代替代品。 You should avoid using File, since many of its methods do not report errors properly. 您应该避免使用File,因为File的许多方法不能正确报告错误。 If you absolutely need a File object, Path has a toFile() method. 如果您绝对需要File对象,则Path具有toFile()方法。 Conversely, File has a toPath() method. 相反,File具有toPath()方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM