获取指定目录下,指定扩展名的文件

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
/*
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中
* 简单说,就是建立一个指定扩展名的文件的列表
* 思路:
* 1,必须进行深度遍历
* 2,要在遍历的过程中进行过滤。将符合条件的内容
* 都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中
*/

public class Test {
    public static void main(String[] args) throws IOException {
        //1,列出你想要遍历的目录
        File dir  = new File("d:\\");
        //2,建立一个过滤器对象,根据用户指定的内容过滤
        FilterBySuffix filter = new FilterBySuffix(".java");
        //3,建立一个容器来装过滤后的文件
        ArrayList<File> list = new  ArrayList<File>();
        //遍历,过滤功能函数
        getList(dir,filter,list);
        File dest = new File("destFile.txt");
        //遍历,写入功能函数
        getdestFile(list,dest);
    }
    /**
     * 遍历指定目录下的文件,把指定扩展名的文件过滤下来
     * 然后将指定扩展名的文件装进容器中
     * @param dir
     * @param filter
     * @param collection
     */
    public static void getList
    (File dir,FilenameFilter filter,Collection<File> collection){
        File[] file = dir.listFiles();
        for (File subfile:file) {
            //判断是否是目录,是文件继续调用该函数
            if(subfile.isDirectory()){
                //递归
                getList(subfile,filter,collection);
            }
            //不是目录,就进行过滤
            else if(filter.accept(subfile, subfile.getAbsolutePath())){
                collection.add(subfile);
            }
        }
    }
    /**
     * 对容器进行遍历,将遍历后的文件写入到指定的文本文件里
     * @param list
     * @param dest
     */
    public static void getdestFile(ArrayList<File> list,File dest){
        //建立一个输出字符流缓冲区对象,提高效率
        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(dest));
            //对该容器进行遍历,然后写入到指定文件夹
            for (File filename:list) {
                bufw.write(filename.getAbsolutePath());
                bufw.newLine();//换行
                bufw.flush();//将缓冲区的数据刷新到文本文件中
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(bufw!=null){//防止发生空指针异常
                try {
                    //关闭流
                    bufw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

import java.io.File;
import java.io.FilenameFilter;
/*
 * 过滤器的设置
 */
public class FilterBySuffix implements FilenameFilter{
    //功能扩展,过滤用户指定的后缀名
    private String suffix;
    public FilterBySuffix(String suffix) {
        super();
        this.suffix = suffix;
    }

    @Override
    public boolean accept(File dir, String name) {
        //过滤该后缀名的文件
        return name.endsWith(suffix);
    }

}
posted @ 2016-11-06 13:54  第五个世界  阅读(481)  评论(0编辑  收藏  举报