过滤器使用方法

package cn.dali3.code15;

import java.io.File;
import java.io.FileFilter;

/*过滤器的使用
 *
 * 需求,过滤出桌面A文件夹下所有以.java结尾下的文件
 *
 * 在File类中,listFiles有两个重载方法
 * 1.public File[] listFiles(FileFilter filter)
 * 2.public File[] listFiles(FilenameFilter filter)
 *
 * 方法1:
 * 参数:FileFilter类型
 *       FileFilter是一个接口,该接口中只有一个accept方法 boolean accept(File pathname);
 *       所以我们使用必须创建实现类,手动重写accept方法。
 * 以这段程序做说明
 *       File [] file = f1.listFiles(new FilefilterImpl());
 * 首先我们传递接口的实现类到listFiles方法中。
 * listFiles方法会把遍历出来的每一个File文件都放到实现类的accept方法中去过滤
 * 如果accept返回true,则listFiles方法会把该File文件放到File数组中,返回False则不会放入。
 * accept方法中我们可以写入我们过滤的规则。
 *
 * 方法2:
 * 参数FilenameFilter filter
 *       FilenameFilter也是一个接口 也只有一个方法boolean accept(File dir,String name)
 *       dir是路径 name是文件夹名称,就是父子路径
 *       用法同上
 *
 * 由于这两个接口都只有一个抽象方法 所以我们可以使用lambda表达式
 * */
public class Demo01 {
    public static void main(String[] args) {
        getAllJava02("C:\\Users\\Administrator\\Desktop\\A");
    }

    private static void getAllJava(String str) {
        File f1 = new File(str);
        File[] file = f1.listFiles(new FilefilterImpl());
        for (File file1 : file) {
            if (file1.isDirectory()) {
                getAllJava(file1.getPath());
            } else {
                System.out.println(file1);
            }
        }
    }

    private static void getAllJava02(String str) {
        File f1 = new File(str);
        File[] file = f1.listFiles(
                (File pathname) -> (pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java"))
        );
        for (File file1 : file) {
            if (file1.isDirectory()) {
                getAllJava(file1.getPath());
            } else {
                System.out.println(file1);
            }
        }
    }
}

你可能感兴趣的:(JAVA)