Java FileFilter详解(带示例)

后端 潘老师 6个月前 (10-23) 125 ℃ (0) 扫码查看

Java FileFilter是用于表示给定目录中的文件和子目录的File对象的过滤器。它是一个函数式接口,因此可以作为lambda表达式或方法引用的分配目标。

FileFilter的使用类似于FilenameFilter,但后者仅使用文件的名称来做出决定。FileFilter接受File对象,因此可以根据其他属性(例如只读)过滤文件。

1.FileFilter类

FileFilter类只有一个方法accept()用于测试是否应该将指定的抽象路径名包含在路径名列表中。

如果pathname应该包含在列表中,它返回true。否则,返回false。

FilerFilter for log files FileFilter logFilefilter = new FileFilter()
{
    public boolean accept(File file) {
        if (file.getName().endsWith(".log")) {
            return true;
        }
        return false;
    }
};

2. 如何使用FileFilter

使用FileFilter的最佳方法是将其传递给File类中的listFiles()方法,其中File表示目录位置。

File directory = new File("/path/directory");
File[] files = directory.listFiles(logFilefilter);

3. FileFilter示例

3.1 在指定目录中过滤所有匹配的文件

在给定的Java示例中,我们在“c:/temp”目录中查找所有日志文件。

File directory = new File("c:/temp");
//验证是否是一个有效目录
if (!(directory.exists() && directory.isDirectory()))
{
  System.out.println(String.format("Directory %s does not exist", directory));
  return;
}
FileFilter logFilefilter = new FileFilter() {
  public boolean accept(File file) {
    if (file.getName().endsWith(".log")) {
      return true;
    }
    return false;
  }
};
File[] files = directory.listFiles(logFilefilter);
for (File f: files)
{
  System.out.println(f.getName());
}

上述程序将列出c:/temp文件夹中存在的所有.log文件。

3.2使用Lambda表达式创建FileFilter

给定的程序使用lambda表达式语法创建FileFilter实例。其余操作将保持不变。

FileFilter logFileFilter = (file) -> {
  return file.getName().endsWith(".log");
};
File[] files = directory.listFiles(logFilefilter);

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10218.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】