FileFilter过滤器的原理和使用以及FileNameFitter过滤器的使用和Lambda优化程序
FileFilter过滤器的原理和使用
需求:
遍历文件夹及其子文件夹,只要.java文件
我们可以使用过滤器来实现
在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器
File[] listFiles(FileFilter filter)
用于抽象路径名(File 对象)的过滤器
作用:用来过滤文件(File对象)
抽象方法:用来过滤文件的方法
boolean accept(File pathname) 测试指定抽象路径名是否应该包含某个路径名列表中。
参数:
File pathname:使用listFiles方法遍历目录,得到每一个文件对象
File[] listFiles(FilenameFilter filter)
实现此接口的类实例可用于过滤文件名
作用:用于过滤文件的方法
抽象方法:用来过滤文件的方法
boolean accept(File dir,String name) 测试指定文件是否应该包含在某一文件列表中。
参数:
File dir:构造方法中传递的被遍历的目录
Sting name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称
注意:
两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则。
过滤器原理图:
代码案例:
public class FileFilterImpl implements FileFilter { @Override public boolean accept(File pathname) { /* 过滤的规则: 在accept方法中方法中,判断File对象是否是以.java结尾 是就返回true 不是就返回false */ if (pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".txt"); } }
public class demg_02Recursion { public static void main(String[] args) { File file = new File("E:\\mave\\apache-maven-3.8.1\\lib"); getAllFile(file); } private static void getAllFile(File file) { File[] files = file.listFiles(new FileFilterImpl());//传递过滤器 for (File file1 : files) { if (file1.isDirectory()){ getAllFile(file1); }else { System.out.println(file1); } } } }
运行结果:
FileNameFitter过滤器的使用和Lambda优化程序
public class demg_02Recursion { public static void main(String[] args) { File file = new File("E:\\mave\\apache-maven-3.8.1\\lib"); getAllFile(file); } private static void getAllFile(File file) {//传递过滤器对象,使用匿名内部类 File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".jar"); } }); for (File file1 : files) { if (file1.isDirectory()){ getAllFile(file1); }else { System.out.println(file1); } } } }
运行结果:
使用Lambda表达式优化匿名内部类(接口中只有一个抽象方法)
public class demg_02Recursion { public static void main(String[] args) { File file = new File("E:\\mave\\apache-maven-3.8.1\\lib"); getAllFile(file); } private static void getAllFile(File file) {//使用Lambda表达式优化匿名内部类 File[] files1 = file.listFiles((File pathname)->{ return pathname.isDirectory() || file.getName().toLowerCase().endsWith(".txt"); }); for (File file1 : files1) { if (file1.isDirectory()){ getAllFile(file1); }else { System.out.println(file1); } } } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本