File--递归

【练习:】通过递归遍历全目录要获取指定后缀的所有文件—File类的方法创建目录、文件

package Test_02;
import java.io.File;

/*

  • 【Me】学习发现总结:
  • 1.通过对指定的目录中的文件经过自定义的过滤器进行筛选–得到指定后缀的所有文件(get.name()获取到的是文件名、endsWith()判断末尾)
  • 2.通过递归遍历全目录–获取指定目录中的文件、子目录中的文件(方法中调用方法)
  • 3.通过递归遍历全目录要获取指定后缀的所有文件
  • 【练习3:】通过递归遍历全目录要获取指定后缀的所有文件—File类的方法创建目录、文件
  • 思路:在定义方法里面递归遍历全目录,在主方法里调用该方法,还需要一个自定义的过滤器筛选
  • 自己想要的文件 接下来可以用学过的File类的方法创建目录、文件— 在package Test_01_FileMethodDemo_01
  • 已经创建好了!然后指定自己想要的后缀的文件—(.java)文件

【重要思想】:
1. 当(F:\父目录)传给方法参数f进来时先执行第一条打印输出语句
2 .执行第二条语句f.listFiles它先转换为数组再把这个父目录里的元素,
通过过滤器判断把[如果1]后缀是.java文件返回给数组–遍历–输出打印
[如果2]有子目录返回true,返回给该方法,此时把(F:\父目录\子目录)返回,
然后执行第一条输出语句,在将(F:\父目录\子目录)转换为数组,里面的元素,
再次通过过滤器判断是否还有目录,
直到没有目录,都是文件的时候就可以通过return pathname.getName().endsWith(".java")判断,
这条语句判断返回后缀.java的文件,----此时数组里就只存在.Java的文件
3. 然后增强for遍历子目录数组,就再次判读是否为目录.输出的是后缀为.java的文件
*
*/

public class Digui_Fleter_Demo_02 {
	public static void main(String[] args) {
	
		// 创建File类对象
		File file = new File("F:\\父目录");
		//调用方法
		getFileAll(file);
	}

// 定义方法:遍历全目录
// 自定义一个方法:递归(方法调方法)得到数组–遍历数组–判断数组元素=文件路径是不还是一 个所谓的子目录,是继续调用方法–得到数组-遍历数组…
// 考虑:返回值类型?–这个方方法就是遍历全目录,就在本方法当中输出啦!
// 参数? --是个(File类型 f参数)

public static void getFileAll(File f) {
	System.out.println(f);
	// 得到数组---参数传递一个过滤器对象---筛选到我们要的文件
	File[] files = f.listFiles(new MyFileFilter());
	// 遍历数组
	for (File fi : files) {// 一次遍历出来所有文件路径
		// System.err.println(fi);---只遍历到父目录里面的元素,此时if判断是否有子目录,有将继续调用此方法遍历子目录
		if (fi.isDirectory()) {
			// 如果是一个子目录则将继续调用此方法--递归(方法里调方法、参数在变化!)
			getFileAll(fi);
		} else {
			// 否则打印出文件路径
				System.out.println(fi);
			}

		}

	}

}

/*

  • 自定义过滤器:

  • 这是一个实现类 去 实现 接口 FileFilter

  • */

     package Test_02;
     
     import java.io.File;
     import java.io.FileFilter;
     
     public class MyFileFilter implements FileFilter {
    
     // @Override覆盖重写抽象方法
     public boolean accept(File pathname) {
     	if (pathname.isDirectory())
     		return true;
        return pathname.getName().endsWith(".java");
        }
     }
    

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41573718/article/details/88779501