目录
1、File[] listFiles(FileFilter filter)
2、File[] listFiles(FilenameFilter filter)
一、文件过滤器的原理和使用
1、File[] listFiles(FileFilter filter)
java.io 接口 FileFilter:
用于抽象路径名(File对象)的过滤器;
作用:
用来过滤文件(File对象);
抽象方法:
boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中;
抽象方法的参数说明:
File pathname就是使用listFiles方法遍历目录得到的每一个文件对象;
2、File[] listFiles(FilenameFilter filter)
java.io 接口 FilenameFilter:
实现此接口的类实例可用于过滤器文件名;
作用:
用于过滤文件名称;
抽象方法:
boolean accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中;
抽象方法参数:
File dir:构造方法中传递被遍历的目录;
String name:使用listFiles方法遍历目录,获取的每一个文件/目录的名称;
注意:
两个过滤器都没有实现类,需要我们自己写实现类,重写过滤器方法accept,在方法中自己定义过滤的规则;
二、原理
三、代码演示
1、FileFilterImpl
package study.filefliter;
import java.io.File;
import java.io.FileFilter;
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
//这个地方如果返回false,就不会保存到文件数组中
//定义规则,只返回目录和目录中的.java文件
if (pathname.isDirectory()){
return true;
}
return pathname.getName().endsWith(".java");
}
}
2、Test
package study.filefliter;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\a");
getFileName(file);
}
private static void getFileName(File file){
if(file.exists()){
if(file.isDirectory()){
System.out.println("File目录名称为"+file.getName());
File[] files = file.listFiles(new FileFilterImpl());
assert files != null;
for (File file1 : files) {
getFileName(file1);
}
}else if(file.isFile()){
System.out.println("File文件名称为"+file.getName());
}
}
}
}
四、FilenameFilter的使用
1、备注:
在此使用匿名内部类的方式演示FilenameFilter,而实际上FileFilter也可以使用此方式;
2、代码演示
修改后的Test类:
package study.filefliter;
import java.io.File;
import java.io.FilenameFilter;
public class TestFilenameFilter {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\a");
getFileName(file);
}
private static void getFileName(File file){
if(file.exists()){
if(file.isDirectory()){
System.out.println("File目录名称为"+file.getName());
File[] files = file.listFiles((dir, name) -> new File(dir,name).isDirectory() || name.endsWith(".java"));
assert files != null;
for (File file1 : files) {
getFileName(file1);
}
}else if(file.isFile()){
System.out.println("File文件名称为"+file.getName());
}
}
}
}
运行结果(跟Test一样):
File目录名称为a
File目录名称为a
File文件名称为a.java
File文件名称为a.java
File目录名称为b
File目录名称为c
File文件名称为a.java