FileFilter过滤器的原理和使用

FileFilter是一个接口 是File的过滤器 该接口可以传递给File类的listFiles(FileFilter)作为参数 

FileFilter隶属于java.io包下

接口中只有一个方法:

boolean accept(File pathname):测试pathname是否应该包含在当前File目录中 符合则返回true

图解

 代码:

过滤器类:

public class FileFilterImp implements FileFilter {
@Override
public boolean accept(File pathname) {
/*
过滤规则:
在accept方法中 判断File对象是否是以.mp3结尾
是就返回true
不是就返回false
*/
//如果pathname是一共文件夹 返回true 继续遍历这个文件夹
if (pathname.isDirectory()){
return true;
}
return pathname.getName().endsWith(".mp3");
}
}

测试类

public class Demo03Catalogue {
public static void main(String[] args) {
File file = new File("E:\\file");
method(file);
}

private static void method(File file) {
File[] files = file.listFiles(new FileFilterImp());
for (File file1 : files) {
//对遍历得到的File对象进行判断 判断是否是文件夹
if (file1.isDirectory()) {
//递归(自己调自己)
method(file1);
} else {
System.out.println(file1);
}
}
}
}

运行结果:

 匿名内部类的使用

代码:

public static void main(String[] args) {
File file = new File("E:\\file");
method(file);
}

private static void method(File file) {
File[] files = file.listFiles(new FileFilter() {

@Override
public boolean accept(File pathname) {
/*
过滤规则:
在accept方法中 判断File对象是否是以.mp3结尾
是就返回true
不是就返回false
*/
//如果pathname是一共文件夹 返回true 继续遍历这个文件夹
if (pathname.isDirectory()) {
return true;
}
return pathname.getName().endsWith(".mp3");
}
});
for (File file1 : files) {
//对遍历得到的File对象进行判断 判断是否是文件夹
if (file1.isDirectory()) {
//递归(自己调自己)
method(file1);
} else {
System.out.println(file1);
}
}
}

运行结果:

posted @ 2022-10-17 10:42  想见玺1面  阅读(150)  评论(0编辑  收藏  举报