文
章
目
录
章
目
录
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);