FilenameFilter 实现文件过滤

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

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

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

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

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

publicclass 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(".")) {
                    returntrue;
                }
                // 返回 false 是过滤掉
                returnfalse;
            }
        });
        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 表达式进行改写:

publicclass 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());
        }
    }
}
相关文章
|
3月前
|
JavaScript 前端开发 Swift
查找和过滤4
查找和过滤4
36 2
|
6月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
39 0
|
7月前
|
缓存 索引
7.过滤查询
7.过滤查询
xxlsso框架设置不需要过滤的路径
xxlsso框架设置不需要过滤的路径
43 0
charles 过滤器-简单过滤和设置过滤
charles 过滤器-简单过滤和设置过滤
关于 WhereElementIsNotElementType() 过滤的理解
关于 WhereElementIsNotElementType() 过滤的理解
关于 WhereElementIsNotElementType() 过滤的理解
|
Java
FilenameFilter 实现文件过滤
实现 FilenameFilter 接口的类的实例用于过滤文件名。这些实例被用来过滤类 File 的 list 方法中的目录列表。FilenameFilter 接口很简单,只有一个 accpet 方法
117 0
|
Python
一日一技:如何对数据进行过滤
一日一技:如何对数据进行过滤
379 0
一日一技:如何对数据进行过滤
|
存储 物联网
如何快速过滤出一次请求的所有日志?
01、前言 在现网出现故障时,我们经常需要获取一次请求流程里的所有日志进行定位。如果请求只在一个线程里处理,则我们可以通过线程ID来过滤日志,但如果请求包含异步线程的处理,那么光靠线程ID就显得捉襟见肘了。
244 0
如何快速过滤出一次请求的所有日志?
|
存储 算法 JavaScript
如何优雅地过滤敏感词
敏感词过滤功能在很多地方都会用到,理论上在Web应用中,只要涉及用户输入的地方,都需要进行文本校验,如:XSS校验、SQL注入检验、敏感词过滤等。今天着重讲讲如何优雅高效地实现敏感词过滤。
15028 0