Java如何递归列出目录中的所有文本文件?

在本例中,您将学习如何使用Files.walkFileTree()来遍历文件树。这个方法需要两个参数。第一个参数是启动文件,在本例中,我们将从驱动器D:开始。第二个参数是为每个文件调用的文件访问器。这里,我们将创建一个名为FindTextFilesVisitor的文件访问器,它扩展了java.nio.file.SimpleFileVisitor。

要获取所有文本文件(文件以。Txt)我们覆盖了由 SimpleFileVisitor 定义的 visitFile ()。在这个方法中,我们检查文件是否以。Txt 扩展名,并在扩展名匹配时打印文件名。我们继续通过返回 FileVisitResult.CONTINUE 来遍历文件树。

package org.nhooo.example.io;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

public class WalkFileTree {
    public static void main(String[] args) {
        try {
            Path startDir = Paths.get("D:/");
            Files.walkFileTree(startDir, new FindTextFilesVisitor());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * FindTextFilesVisitor.
     */
    static class FindTextFilesVisitor extends SimpleFileVisitor<Path> {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if (file.toString().endsWith(".txt")) {
                System.out.println(file.getFileName());
            }
            return FileVisitResult.CONTINUE;
        }
    }
}

如不需要列出文件,您可以修改上面的代码段,例如使用它删除以.bak结尾的所有文件。只需更改扩展名,并在visitFile()方法中用file delete语句替换print out语句。