Bal*_*usC 196
您可以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的堆栈可以容纳的深度更敏感.您可能希望使用迭代方法或尾递归,但这是另一个主题;)
msa*_*ord 78
如果您使用的是Java 1.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();
    }
  }
}
Ben*_*n J 27
退房的文件实用程序在Apache的百科全书类-特别iterateFiles:
允许迭代给定目录(以及可选的子目录)中的文件.
小智 7
运用 org.apache.commons.io.FileUtils
File file = new File("F:/Lines");       
Collection<File> files = FileUtils.listFiles(file, null, true);     
for(File file2 : files){
    System.out.println(file2.getName());            
} 
如果您不想要子目录中的文件,请使用false.
对于Java 7+,还有https://docs.oracle.com/javase/7/docs/api/java/nio/file/DirectoryStream.html
从Javadoc中获取的示例:
List<Path> listSourceFiles(Path dir) throws IOException {
   List<Path> result = new ArrayList<>();
   try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{c,h,cpp,hpp,java}")) {
       for (Path entry: stream) {
           result.add(entry);
       }
   } catch (DirectoryIteratorException ex) {
       // I/O error encounted during the iteration, the cause is an IOException
       throw ex.getCause();
   }
   return result;
}
| 归档时间: | 
 | 
| 查看次数: | 159885 次 | 
| 最近记录: |