首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FilenameFilter 实现文件过滤

FilenameFilter 实现文件过滤

作者头像
cxuan
发布2019-09-17 17:06:38
9670
发布2019-09-17 17:06:38
举报
文章被收录于专栏:Java建设者Java建设者

这是 cxuan 的第

32

篇原创文章

实现 FilenameFilter 接口的类的实例用于过滤文件名。这些实例被用来过滤类 File 的 list 方法中的目录列表。FilenameFilter 接口很简单,只有一个 accpet 方法

@FunctionalInterface
public interface FilenameFilter {
    boolean accept(File dir, String name);
}

此接口用 @FunctionalInterface 标注,@FunctionalInterface 的是 Java8 提出来的,它表示由此注解注释的接口都可以作为功能性接口,功能性接口一种信息性注释类型,从概念上来讲,一个功能性接口应该有一个抽象方法。功能性接口的实例被用来创建 lambda 表达式,方法引用 或者 构造器引用。

所以FilenameFilter 也只有一个 accpet 方法,它用来测试指定的文件是否应包含在文件列表中。下面通过一个例子来演示一下 FilenameFilter 的用法

public class FilenameFilterApp {

    public static void main(String[] args) {
        File file = new File(".");
        // 匿名内部类写法,可以用 lambda 表达式改写
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 返回 true 是过滤出
                if (name.startsWith(".")) {
                    return true;
                }
                // 返回 false 是过滤掉
                return false;
            }
        });

        for(int i = 0;i < files.length;i++){
            File f = files[i];
            System.out.println(f.getName());
        }
    }
}

代码使用了当前根目录作为文件的路径,使用 java.io.File 类中的 listFiles 方法用于列出所有文件,返回一个 File 类型的数组,代码采用匿名内部类的写法,引用了 FilenameFilter 中唯一的 accpet() 方法,方法返回 true 表示过滤出满足条件的文件路径,返回 false 是过滤掉不满足条件的文件路径。

可以使用 lambda 表达式进行改写:

public class FilenameFilterApp {

    public static void main(String[] args) {
        File file = new File(".");

        File[] files = file.listFiles((d, s) -> {
            return s.startsWith(".");
        });

        for(int i = 0;i < files.length;i++){
            File f = files[i];
            System.out.println(f.getName());
        }
    }
}

文章参考:

https://www.journaldev.com/845/java-filenamefilter-example

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java建设者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档