Java 文件过滤器的简单使用

一、Java文件过滤器接口

FileFilter 和 FilenameFilter 接口 是 Java 提供的文件筛选相关接口,可在遍历目录时使用此接口按照一定要求,筛选出所需要的文件。

FileFilter 和 FilenameFilter 来自 java.io 包,用于文件过滤规则的定义
FileFilter 和 FilenameFilter 是接口过滤规则是由自己创建实现类定义的
FileFilter 和 FilenameFilter 接口使用方式大同小异
FileFilter 接口只有一个抽象方法 boolean accept(File pathname);
FilenameFilter 接口只有一个抽象方法 boolean accept(File dir, String name);
除了创建实现类和使用匿名对象使用 FileFilter 和 FilenameFilter 接口外,也可 Java 8 之后的 lambda 表达式。

二、使用步骤

需求分析:
筛选某个目录下所有以 .java 结尾的文件(不区分大小写)。
.
编码分析:
1.获取当前目录下所有文件夹及文件名称(使用File 类的 listFiles 方法
2.判断文件是否符合要求(.java 结尾)
3.在控制台打印符合要求的文件目录

【tips】

listFiles 有三种重载形式
FileFilter 和 FilenameFilter 将作为参数传递给 listFiles 方法
①File[] listFiles() 返回所有的文件和目录
File[] listFiles(FileFilter filter) 返回符合过滤规则的文件和目录
File[] listFiles(FilenameFilter filter) 返回符合过滤规则的文件和目录

1.普通实现方式(不使用过滤器接口)

public class Recursion {
    public static void main(String[] args) {
        File dir= new File("C:\\filter");
        // 获取参数路径下所有的目录与文件
        File[] files = dir.listFiles();
        for (File file  : files) {
            //如果 file  不是 目录,继续判断文件是否以 .java 结尾(忽略大小写)
            if(!file.isDirectory() && file.getName().toLowerCase().endsWith(".java")){
                // 打印文件路径
                System.out.println(file);
            }
        }
    }
}

2.使用过滤器接口

①使用 FileFilter 接口

// 创建 FileFilter  接口实现类 重写 accept方法
class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        // 如果不是文件夹并且以.java结尾返回true
        if (!pathname.isDirectory() && pathname.getName().toLowerCase().endsWith(".java")) {
            return true;
        }
        return false;
    }
}

public class Recursion {
    public static void main(String[] args) {
        File dir= new File("C:\\filter");
        // 将 FileFilterImpl 作为 listFiles 方法参数
        File[] files = dir.listFiles(new FileFilterImpl());
        // 遍历过滤后的结果
        for (File file : files) {
            System.out.println(file);
        }
    }
}

②使用 FilenameFilter 接口

public class Recursion {
    public static void main(String[] args) {
        File dir = new File("C:\\filter");
        // 获取参数路径下所有的目录与文件
        // 未创建实现类,直接使用匿名内部类
        File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
            	// 这里需要将 参数dir,name构造为 File之后再判断是否为目录
                if (!new File(dir,name).isDirectory() && name.toLowerCase().endsWith(".java")) {
                    return true;
                }
                return false;
            }
        });
        for (File file : files) {
            System.out.println(file);
        }
    }
}

目录与控制台打印结果
在这里插入图片描述 在这里插入图片描述


总结

个人认为在一些简单的场景使用这种方式有些鸡肋,
但毕竟还是要了解这部分知识,知道 Java API 存在这个东西的,以便日后为你所用。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值