File中有两个文件过滤器:
public interface FileFilter
用于抽象路径名的过滤器。
此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法。
public interface FilenameFilter
实现此接口的类实例可用于过滤器文件名。
Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。
**使用:**在Java中:
list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
listRoots() 列出可用的文件系统根。
两个接口中方法的详细解释:
1、FileFilter:boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中。
参数:
pathname - 要测试的抽象路径名
返回:
当且仅当应该包含 pathname 时返回 true
2、 FilenameFilter:
boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
参数:
dir - 被找到的文件所在的目录。
name - 文件的名称。
返回:
当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
两者的区别:
FilenameFilter中的accept函数接收的是两个参数:指定父目录的路径和父目录路径中所有的子文件或者子文件夹,需要将这两个参数封装成File的对象再使用File中的功能。
FileFilter中的accept函数接收的则直接是:完整的路径,即需要进行过滤操作的文件或文件夹,直接可以使用File中的功能。
实现:
public static void listMyFile2(File file) {
String[] fileArr = file.list(new MyFileter());
for (String str : fileArr) {//
System.out.println(str);
}
}
class MyFileter implements FilenameFilter {
// dir当前指定目录
// name指定目录中的子文件
@Override
public boolean accept(File dir, String name) {
System.out.println(dir);
return name.endsWith(".txt");
}
}
public static void listMyFile3(File file) {
File[] fileArr = file.listFiles(new MyFileter2());
for (File file2 : fileArr) {
System.out.println(file2);
}
}
class MyFileter2 implements FileFilter {
// pathname:当前指定目录一级目录
@Override
public boolean accept(File pathname) {
// System.out.println("pathname=" + pathname);
boolean b = pathname.getName().endsWith(".txt") && pathname.isFile();
return b;
}
}