添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

对于一个嵌套的目录,获取目录下所有的文件,可以使用一下两种方式:

1、递归方法:

static List<String> ergodic(File file, List<String> resultFileName) {
		File[] files = file.listFiles();
		if (files == null)
			return resultFileName;// 判断目录下是不是空的
		for (File f : files) {
			if (f.isDirectory()) {// 判断是否文件夹
				//resultFileName.add(f.getPath());
				ergodic(f, resultFileName);// 调用自身,查找子目录
			} else
				resultFileName.add(f.getPath());
		return resultFileName;

File类提供了如下两个方法:

  • file.list():返回目录下文件和子目录名;(不会递归)
  • file.listFiles():返回目录下文件和子目录File对象;(不会递归)

2、Files.walk():

在jdk8中,可以使用walk方法递归的去查找目录下所有文件,例如:

static void walk(String path) throws Exception {
		try (Stream<Path> paths = Files.walk(Paths.get(path))) {
			paths
		    .filter(Files::isRegularFile)
		    .forEach(System.out::println);
  • 上例使用了Try with Resources模式,它可以确保无论在什么情况下,流都将关闭。
  • walk方法会自动递归子目录;

Files.walk通过递归遍历以给定起始文件为根的文件树来返回由Path延迟填充的流。 文件树是深度优先遍历的,有两种重载的Files.walk方法:

  • maxDepth参数,设置要递归的深度;Files.walk(Paths.get(path),2)
  • 默认不会自动跟随符号链接, 设置options参数FOLLOW_LINKS选项,则遵循符号链接。 Files.walk(Paths.get(path),FileVisitOption.FOLLOW_LINKS)

接下来看一些示例:

var dirName = "C:/Users/Jano/Downloads";
//过滤出目录
try (Stream<Path> paths = Files.walk(Paths.get(dirName))) {
    paths.filter(Files::isDirectory)
            .forEach(System.out::println);
//按后缀名过滤
try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) {
    paths.map(path -> path.toString()).filter(f -> f.endsWith(".pdf"))
            .forEach(System.out::println);

更多示例可以查看:https://vimsky.com/examples/detail/java-method-java.nio.file.Files.walk.html

public static List listFiles(File file){ List<File> fileList = new ArrayList<>(); if (file.isDirectory()){ for (File listFile : file.listFiles()) { //递归:找出某个文件夹下的所有文件 public class Demo4 { public static void showFile(String pathname){ //传入的形参可能是文本文件文件夹 File f1 = n 今天去面试了,笔试的时候遇到这个题印象深刻(因为不会),在此做出这个笔记,这个笔记是用了http://blog.csdn.net/qq_27603235/article/details/50752883这个博客的答案,在此学习一下:利用File类中的一个listFiles将该文件路径下所有的文件全部列出来,然后通过循环遍历。代码如下:package my; import java.io.File... xxx.class.getResource("") xxx.class.getResource("/") xxx.class.getProtectionDomain().getCodeSource().getLocation() 适当的修改下面代码:package read_dir;import java.io.File;import java.util.ArrayList;import java.util.List;public class ReadDirector {private static String dir_name="D:\\xunlei";public static void main(String[] ...