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