簡體   English   中英

在Java中,遞歸列出所有文件。 但跳過一個子目錄

[英]In java, list all files recursively. but skip one sub-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有其自己的方法: 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的許多方法不能正確報告錯誤。 如果您絕對需要File對象,則Path具有toFile()方法。 相反,File具有toPath()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM