FileFilter过滤器的原理和使用。案例:将.java结尾的文件输出

传递过滤器对象,创建过滤器FileFilter实现类:

package com.chunzhi.Test03Filter;

import java.io.File;

public class Test01Filter {
    public static void main(String[] args) {
        File f = new File("C:\\Other\\abc");
        getAllFile(f);
    }

    public static void getAllFile(File dir) {
        File[] files = dir.listFiles(new FileFilterImpl());
        for (File f : files) {
            // 对遍历得到的File对象f进行判断,判断是否为文件夹
            if (f.isDirectory()) {
                // f是一个文件夹则继续遍历这个文件夹,不是文件夹则执行下一个方法体
                getAllFile(f);
            } else {
                // f是一个文件,直接打印即可
                System.out.println(f);
            }
        }
    }
}
package com.chunzhi.Test03Filter;

import java.io.File;
import java.io.FileFilter;
/*
    创建过滤器FileFilter的实现类,重写过滤方法accept,自定义过滤规则
 */
public class FileFilterImpl implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        // 如果pathname(路径名)是一个文件夹则返回true
        if (pathname.isDirectory()) {
            return true;
        }
        // 不是的话,则将传递过来的路径名进行文件名称获取,转为小写,看文件结尾是否以.java结尾
        return pathname.getName().toLowerCase().endsWith(".java");
   }
}

传递过滤器对象,使用匿名内部类:

package com.chunzhi.Test03Filter;

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

public class Test02Filter {
    public static void main(String[] args) {
        File f = new File("C:\\Other\\abc");
        getAllFile(f);
    }

    public static void getAllFile(File dir) {
        // 传递过滤器对象,使用匿名内部类
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java");
            }
        });
        for (File f : files) {
            // 对遍历得到的File对象f进行判断,判断是否为文件夹
            if (f.isDirectory()) {
                // f是一个文件夹则继续遍历这个文件夹,不是文件夹则执行下一个方法体
                getAllFile(f);
            } else {
                // f是一个文件,直接打印即可
                System.out.println(f);
            }
        }
    }
}

使用"Lambda"表达式优化匿名内部类,单参数(接口中只有一个抽象方法才能用):

package com.chunzhi.Test03Filter;

import java.io.File;

public class Test03Filter {
public static void main(String[] args) {
File f = new File("C:\\Other\\abc");
getAllFile(f);
}

public static void getAllFile(File dir) {
// 使用Lambda表达式优化匿名内部类(接口中只有一个抽象方法才能用)
File[] files = dir.listFiles((File pathname) -> {
return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java");
});
// 再简便一下lambda表达式
// File[] files = dir.listFiles((File pathname) -> pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java"));
for (File f : files) {
// 对遍历得到的File对象f进行判断,判断是否为文件夹
if (f.isDirectory()) {
// f是一个文件夹则继续遍历这个文件夹,不是文件夹则执行下一个方法体
getAllFile(f);
} else {
// f是一个文件,直接打印即可
System.out.println(f);
}
}
}
}

使用"Lambda"表达式优化匿名内部类,双参数(接口中只有一个抽象方法才能用):

package com.chunzhi.Test03Filter;

import java.io.File;
import java.io.FilenameFilter;

public class Test04Filter {
    public static void main(String[] args) {
        File f = new File("C:\\Other\\abc");
        getAllFile(f);
    }

    public static void getAllFile(File dir) {
        File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return new File(dir, name).isDirectory() || name.toLowerCase().endsWith(".java");
            }
        });
        // 再简便一下lambda表达式
        // File[] files = dir.listFiles((d,name) -> new File(d, name).isDirectory() || name.toLowerCase().endsWith(".java"));

        for (File f : files) {
            // 对遍历得到的File对象f进行判断,判断是否为文件夹
            if (f.isDirectory()) {
                // f是一个文件夹则继续遍历这个文件夹,不是文件夹则执行下一个方法体
                getAllFile(f);
            } else {
                // f是一个文件,直接打印即可
                System.out.println(f);
            }
        }
    }
}
posted @ 2020-11-20 21:16  春志  阅读(189)  评论(0编辑  收藏  举报