FilenameFilter 实现文件过滤

举报
cxuan 发表于 2021/07/15 01:40:09 2021/07/15
【摘要】 关注上方蓝字关注我们 这是 cxuan 的第 32 篇原创文章 实现 FilenameFilter 接口的类的实例用于过滤文件名。这些实例被用来过滤类 File 的 list 方法中的目录列表。FilenameFilter 接口很简单,只有一个 accpet 方法 @Functio...

640

关注上方蓝字关注我们

640?wx_fmt=jpeg

这是 cxuan 的第
32
篇原创文章

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


    
  1. @FunctionalInterface
  2. public interface FilenameFilter {
  3. boolean accept(File dir, String name);
  4. }

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

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


    
  1. public class FilenameFilterApp {
  2. public static void main(String[] args) {
  3. File file = new File(".");
  4. // 匿名内部类写法,可以用 lambda 表达式改写
  5. File[] files = file.listFiles(new FilenameFilter() {
  6. @Override
  7. public boolean accept(File dir, String name) {
  8. // 返回 true 是过滤出
  9. if (name.startsWith(".")) {
  10. return true;
  11. }
  12. // 返回 false 是过滤掉
  13. return false;
  14. }
  15. });
  16. for(int i = 0;i < files.length;i++){
  17. File f = files[i];
  18. System.out.println(f.getName());
  19. }
  20. }
  21. }

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

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


    
  1. public class FilenameFilterApp {
  2. public static void main(String[] args) {
  3. File file = new File(".");
  4. File[] files = file.listFiles((d, s) -> {
  5. return s.startsWith(".");
  6. });
  7. for(int i = 0;i < files.length;i++){
  8. File f = files[i];
  9. System.out.println(f.getName());
  10. }
  11. }
  12. }

文章参考:

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

640?wx_fmt=png
你点的每个好看,我都认真当成了喜欢

文章来源: cxuan.blog.csdn.net,作者:程序员cxuan,版权归原作者所有,如需转载,请联系作者。

原文链接:cxuan.blog.csdn.net/article/details/103035042

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。