为了账号安全,请及时绑定邮箱和手机立即绑定

如何迭代Java目录中的文件?

如何迭代Java目录中的文件?

蓝山帝景 2019-07-03 16:11:00
如何迭代Java目录中的文件?我需要一个目录中所有文件的列表,包括所有子目录中的文件。用Java完成目录迭代的标准方法是什么?
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

你可以用File#isDirectory()若要测试给定文件(路径)是否为目录,请执行以下操作。如果这是true,然后您只需再次调用同一个方法,并使用它的File#listFiles()结果。这叫做递归.

这是一个基本的开球例子。

public static void main(String... args) {
    File[] files = new File("C:/").listFiles();
    showFiles(files);}public static void showFiles(File[] files) {
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getName());
            showFiles(file.listFiles()); // Calls same method again.
        } else {
            System.out.println("File: " + file.getName());
        }
    }}

请注意,这对StackOverflowError当树的深度超过JVM的堆栈所能容纳的深度时。您可能需要使用迭代方法或尾递归相反,这是另一个主题;)


查看完整回答
反对 回复 2019-07-03
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

如果您使用的是Java1.7,则可以使用java.nio.file.Files.walkFileTree(...).

例如:

public class WalkFileTreeExample {

  public static void main(String[] args) {
    Path p = Paths.get("/usr");
    FileVisitor<Path> fv = new SimpleFileVisitor<Path>() {
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
          throws IOException {
        System.out.println(file);
        return FileVisitResult.CONTINUE;
      }
    };

    try {
      Files.walkFileTree(p, fv);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }}

如果您使用的是Java 8,则可以使用流接口java.nio.file.Files.walk(...):

public class WalkFileTreeExample {

  public static void main(String[] args) {
    try (Stream<Path> paths = Files.walk(Paths.get("/usr"))) {
      paths.forEach(System.out::println);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }}


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信