【IO流】05 - file类中的方法 - 过滤器

先写过滤器 implements FilenameFilter,用于过滤指定扩展名的文件

package cn.itcast.io.b.filter;

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

/**
 * 用于过滤指定扩展名的文件。
 * @author Teaching
 *
 */
public class FilenameFilterBySuffix implements FilenameFilter {

    private String suffix;
    
    public FilenameFilterBySuffix(String suffix) {
        super();
        this.suffix = suffix;
    }

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

}

 

package cn.itcast.io.a.file;

import java.io.File;

import cn.itcast.io.b.filter.FilenameFilterBySuffix;

public class FileMethodDemo4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 需求2:获取目录中的内容,但是只要.java文件。
         */
        File dir = new File("E:\\Java_Code\\day06");

        File[] files = dir.listFiles(new FilenameFilterBySuffix(".JPG"));// 需要传递一个文件名过滤器 FilenameFilter对象。
        
        /*listFiles源码解析。
        public File[] listFiles(FilenameFilter filter) {//FilenameFilter filter = new FilenameFilterByJava()
            String ss[] = list();//调用了File类中的list()获取到所有的名称数组 ss。
            if (ss == null) return null;//健壮性判断,如果数组为null,就返回。
            ArrayList<File> files = new ArrayList<>();//创建一个集合。元素是File类型。
            for (String s : ss)//遍历名称数组。
                if ((filter == null) || filter.accept(this, s))//对遍历的名称进行过滤器的判断。将 当前目录this,遍历到名称s传递给accept方法。
                            //一旦条件满足过滤器的过滤条件。
                    files.add(new File(s, this));//将满足过滤条件添加到集合中。添加是 将文件名称和当前目录封装成File对象。new File(dir,name);
                    
            return files.toArray(new File[files.size()]);//将集合转成数组返回,为啥呢?不需要增删操作。
        }
        */
        
        
        for (File file : files) {
            //if(file.getName().endsWith(".jpg")){
            System.out.println(file.getName());
        }
    }

}

posted @ 2018-01-29 16:57  清风拂柳  阅读(214)  评论(0编辑  收藏  举报