FileFilter 文件过滤器

FileFilter

File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
FileFilter 文件过滤器_第1张图片

创建实现类实现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简化代码:请读者搜索其他文章

你可能感兴趣的:(java)