File类(五)---File类的过滤器

一、只要该目录下.java文件
File类(五)---File类的过滤器_第1张图片

package FileFilter;

import java.io.File;

public class FileFilterDemo1 {
    //需求:只要该目录下.java文件
    public static void main(String[] args){
        File dir = new File("E:\\IdeaProjects\\spring-2\\src\\autowire");
        File[] files = dir.listFiles();
        for (File f:files) {
            if(f.getName().endsWith(".java")){
                System.out.println(f.getName());
            }
        }

    }
}

二、用过滤器获取.java文件

File类(五)---File类的过滤器_第2张图片

获取.java的过滤器
File类(五)---File类的过滤器_第3张图片

package FileFilter;

import java.io.File;

public class FileFilterDemo2 {
    //用过滤器获取.java文件
    public static void main(String[] args){
        File dir = new File("E:\\IdeaProjects\\spring-2\\src\\autowire");
        File[] files = dir.listFiles(new FileNameFilterByJava());

        /**
         * listFiles源码
         *   public File[] listFiles(FilenameFilter filter) {
         *         String ss[] = list();                         //file调用list()方法获取所有文件名数组
         *         if (ss == null) return null;                  //健壮性判断 数组为空就返回
         *         ArrayList files = new ArrayList<>();
         *         for (String s : ss)                                   //遍历文件名
         *             if ((filter == null) || filter.accept(this, s))  //对名称进行过滤器的判断。将当前目录this(即dir对象)和名字s传给过滤器accept方法
         *                 files.add(new File(s, this));                //符合过滤器条件的加入list中(将目录和文件名称封装成File对象添加进list)
         *         return files.toArray(new File[files.size()]);        //list转数组  为啥?不需要增删操作
         *     }
         */

        for (File f:files) {
                System.out.println(f.getName());
        }
    }
}
package FileFilter;

import java.io.File;
import java.io.FilenameFilter;

//获取.java的过滤器
public class FileNameFilterByJava implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".java");
    }
}

三、过滤器获取目录下指定类型文件
File类(五)---File类的过滤器_第4张图片

根据构造函数不同的过滤器
File类(五)---File类的过滤器_第5张图片

package FileFilter;

import java.io.File;

public class FileFilterDemo3 {
    //过滤器获取目录下指定类型文件
    public static void main(String[] args) {
        File dir = new File("E:\\IdeaProjects\\spring-2\\src\\autowire");
        File[] files = dir.listFiles(new FileNameFilterByAny(".jpg"));   //改变过滤器构造函数传入的字符串达到目的
        for (File f:files) {
            System.out.println(f.getName());
        }
    }
}

package FileFilter;

import java.io.File;
import java.io.FilenameFilter;

public class FileNameFilterByAny implements FilenameFilter {
    private String any;

    public FileNameFilterByAny(String any) {
        this.any = any;
    }

    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(any);
    }
}


你可能感兴趣的:(Java基础--IO流)