File--递归

该博客介绍了如何通过递归遍历全目录,利用File类的方法获取指定后缀的所有文件。首先,自定义过滤器筛选出所需后缀的文件,接着递归遍历每个目录,如果遇到子目录则继续调用方法,直到找到所有匹配的文件。最终,通过增强for循环遍历并输出所有.java文件。

【练习:】通过递归遍历全目录要获取指定后缀的所有文件—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");
        }
     }
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值