FilenameFilter 实现文件过滤
关注上方蓝字关注我们
实现 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
文章来源: cxuan.blog.csdn.net,作者:程序员cxuan,版权归原作者所有,如需转载,请联系作者。
原文链接:cxuan.blog.csdn.net/article/details/103035042
- 点赞
- 收藏
- 关注作者
评论(0)