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);
}
}
}
运行结果: