在File类中有两个和ListFiles重载的方法,方法的参数传递的是过滤器
File[] | listFiles(FileFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
---|
| listFiles(FilenameFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
---|
第一个:
File[] | listFiles(FileFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
---|
软件包 java.io
Interface FileFilter
- 抽象路径名的过滤器。
该接口的实例可以传递给
类的File
方法。listFiles(FileFilter)
java.io.FileFilter接口:用于抽象路径名(Filte对象)的过滤器
作用:用来过滤文件的(File对象)
抽象方法:用来过滤文件的方法
方法:boolean accept(File pathname) 测试指定的抽象路径名是否应包含在路径名列表中。
accept方法测试指定抽象路径名是否应该包含某个路径名列表中
参数:
File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
第二个
| listFiles(FilenameFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
---|
软件包 java.io
Interface FilenameFilter
java.io.FilenameFilter接口:用于实现此接口的类的实例用于过滤文件名。
作用:用于过滤文件名称
抽象方法:用来过滤文件的方法
方法:boolean accept(File dir, String name) 测试指定文件是否应包含在文件列表中。
accept方法测试文件是否应该包含某一文件夹列表中
参数:
File dir:构造方法中传递的被遍历的目录
String name:使用ListFiles方法遍历目录,得到的每一个文件or文件夹的名称
=================
两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤方法accept在方法中定义过滤的规则
File类型的对象要转换成字符串类型,就要找对应的转换的方法,比如toString.getName
第一种理解
package com.baidu.demoFilter;
import java.io.File;
public class DemoFilter {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
System.out.println(dir);
File[] files = dir.listFiles(new FileFilterImpl());
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
/*
创建过滤器FileFilter的现实类,重写过滤方法
*/
public class FileFilterImpl implements FileFilter{
public boolean accept(File pathname) {
return false;
}
}
打印结果:
F:\develop
第二种理解
package com.baidu.demoFilter;
import java.io.File;
public class DemoFilter {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
System.out.println(dir);
File[] files = dir.listFiles(new FileFilterImpl());
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
/*
创建过滤器FileFilter的现实类,重写过滤方法
*/
public class FileFilterImpl implements FileFilter{
public boolean accept(File pathname) {
return true;
}
}
打印结果
F:\develop\a\1.jpg
F:\develop\a\a.txt
F:\develop\b
F:\develop\haha.txt
F:\develop\shangguanziyi
F:\develop\shangguanziyi\loveyou
第三种升级优化代码:
package com.baidu.demoFilter;
import java.io.File;
public class DemoFilter {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
//System.out.println(dir);
File[] files = dir.listFiles(new FileFilterImpl());
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
/*
创建过滤器FileFilter的现实类,重写过滤方法
*/
public class FileFilterImpl implements FileFilter{
public boolean accept(File pathname) {
//如果pathname是一个文件夹,也得返回true,继续遍历这个文件夹
if (pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".jpg");
}
}
打印结果:
F:\develop\a\1.jpg
===整个过程图