FileFilter
File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
创建实现类实现FileFilter接口
java.io
Interface FileFilter抽象路径名的过滤器。
boolean accept(File pathname)
测试指定的抽象路径名是否应包含在路径名列表中。
File[] listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
实现类代码:
public class Demo09FilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
}
代码含义:如果文件是文件夹就返回,如果是以java为后缀名的文件也返回;也就是说在测试类方法中listFiles中只有文件夹和java文件可以选择。ListFiles上一章节有所介绍!
测试类代码:
public class Demo09FileFilter {
public static void main(String[] args) {
File file = new File("E:\\xpu\\ideaproject\\20190905\\src\\cn\\itcast\\File");
digui(file);
}
public static void digui(File dir)
{
File[] files = dir.listFiles(new Demo09FilterImpl());//加载过滤器实现类
for (File f :
files) {
if(f.isDirectory())//判断是否为文件夹,如果是
digui(f);//使用递归,继续遍历其中的文件
else {
String s = f.toString();
boolean b = s.endsWith(".txt");
if (b)
System.out.println(f);
}
}
}
}
效果演示:
Process finished with exit code 0
由于没有过滤的是java文件和文件夹,并没有txt文本文件,所以没有打印结果!
使用匿名内部类来实现文件过滤器
代码:
public class Demo10FileFilterannoy {
public static void main(String[] args) {
File file = new File("E:\\xpu\\ideaproject\\20190905\\src\\cn\\itcast\\File");
digui(file);
}
public static void digui(File dir)
{
/* File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
});//加载过滤器实现类*/
//使用lambda
/*File[] files = dir.listFiles((pathname)->{
{
if(pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
});//加载过滤器实现类*/
//简化lambda
/* File[] files = dir.listFiles((pathname)-> pathname.isDirectory()||pathname.toString().endsWith(".java")
);//加载过滤器实现类*/
//第二种过滤器
/*File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File pathname=new File(dir,name);
return pathname.isDirectory()||name.toString().endsWith(".java");
}
});*/
//使用lambda
/* File[] files = dir.listFiles((d, name)-> {
return new File(d,name).isDirectory()||name.toString().endsWith(".java");
});*/
//简化lambda
File[] files = dir.listFiles((d,name)->new File(d,name).isDirectory()||name.toString().endsWith(".java"));
for (File f :
files) {
if(f.isDirectory())//判断是否为文件夹,如果是
digui(f);//使用递归,继续遍历其中的文件
else {
String s = f.toString();
boolean b = s.endsWith(".java");
if (b)
System.out.println(f);
}
}
}
}
其中有使用lambda简化代码:请读者搜索其他文章