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); } } } }
运行结果:

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号