首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中遍历目录中的文件?

如何在Java中遍历目录中的文件?
EN

Stack Overflow用户
提问于 2010-07-01 09:02:54
回答 8查看 200.8K关注 0票数 189

我需要获取一个目录中所有文件的列表,包括所有子目录中的文件。用Java完成目录迭代的标准方法是什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-07-01 09:13:25

您可以使用File#isDirectory()来测试给定的文件(路径)是否为目录。如果这是true,那么您只需使用其File#listFiles()结果再次调用相同的方法。这称为recursion

这是一个基本的启动示例:

代码语言:javascript
复制
package com.stackoverflow.q3154488;

import java.io.File;

public class Demo {

    public static void main(String... args) {
        File dir = new File("/path/to/dir");
        showFiles(dir.listFiles());
    }

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

请注意,当树的深度超过StackOverflowError的堆栈时,这对JVM很敏感。如果您已经在使用Java8或更新版本,那么最好使用利用tail recursionFiles#walk()

代码语言:javascript
复制
package com.stackoverflow.q3154488;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DemoWithJava8 {

    public static void main(String... args) throws Exception {
        Path dir = Paths.get("/path/to/dir");
        Files.walk(dir).forEach(path -> showFile(path.toFile()));
    }

    public static void showFile(File file) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getAbsolutePath());
        } else {
            System.out.println("File: " + file.getAbsolutePath());
        }
    }
}
票数 228
EN

Stack Overflow用户

发布于 2010-07-01 09:55:32

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

例如:

代码语言:javascript
复制
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();
    }
  }

}

如果您使用的是Java8,则可以将流接口与java.nio.file.Files.walk(...)一起使用

代码语言:javascript
复制
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();
    }
  }

}
票数 96
EN

Stack Overflow用户

发布于 2014-11-08 01:59:45

使用org.apache.commons.io.FileUtils

代码语言:javascript
复制
File file = new File("F:/Lines");       
Collection<File> files = FileUtils.listFiles(file, null, true);     
for(File file2 : files){
    System.out.println(file2.getName());            
} 

如果不需要子目录中的文件,请使用false。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3154488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档