IO获取指定目录及其目录下子目录

  一、需求:获取指定目录下,指定扩展名的文件(包含子目录中的)

  二、需要用到的方法

    1、FilenameFilter返回抽象路径名的定义中表示此抽象路径名的目录中的文件的数组。

       filter.accept : 对遍历到的文件进行过滤器的过滤,将符合对象的File文件   

 

package keyboad;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 需求:
 * 获取指定目录下,指定扩展名的文件(包含子目录中的)
 * 这些文件的绝对路径写入到一个文本文件中
 *
 * means:建立一个指定的扩展名的文件列表
 *思路:
 * 1、深度遍历
 * 2、需要在遍历过程总进行过滤,将符合条件的内容储存到容器中
 * 3、对容器中的内容进行遍历并将绝对路径写入到文件中
 *
 * Created by lcj on 2017/11/10.
 */
public class practiseDemo {
    public static void main(String[] args) {
        //指定一个文件目录
        File dir = new File("D:\\Repository");
        //过滤器,过滤后缀名为.jar
        FilenameFilter filter = new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".jar");
            }
        };
        List<File> list = new ArrayList<File>();
        //执行getFiles方法,执行完将数据储存至list中
        getFiles(dir , filter , list);
        //将过滤完的文件保存至java.txt文件中
        File destFile = new File(dir,"java.txt");
        //执行wrinte2File方法
        wrinte2File(list,destFile);
    }

    /**
     *对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤
     * 将过滤器后的内容存储到指定容器List中
     * @param dir
     * @param filter
     * @param list
     */
    //文件路径,FilenameFilter 过滤器文件名,将过滤掉的数据存储数组
    public static void getFiles(File dir,FilenameFilter filter,List<File> list ) {
//listFiles 方法:返回抽象路径名的定义中表示此抽象路径名的目录中的文件的数组。
        File[] files = dir.listFiles();
        for (File file : files)///file 变量
        {
            if (file.isDirectory())
            {
                //如果File是目录,将进行递归
                getFiles(file,filter,list);
            }else {
                //对遍历到的文件进行过滤器的过滤,将符合对象的File文件,存储至List集合中
                if (filter.accept(dir,file.getName()))
                {
                    list.add(file);
                }
            }
        }
    }
    //什么文件写入到    写到那个文件(目的文件)
    public static void wrinte2File(List<File> list,File destFile)      //List<File>  字符流
    {

        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(destFile));
            for (File file :list)
            {
                bufw.write(file.getAbsolutePath());
                bufw.newLine();
                bufw.flush();
            }
        }catch (Exception e)
        {
            throw  new RuntimeException("关闭失败");
        }
        finally {
            if (bufw !=null)
            {
                try {
                    bufw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw  new RuntimeException("关闭失败");
                }
            }
        }
    }
}

 

posted on 2017-11-13 10:46  lcj122  阅读(265)  评论(0编辑  收藏  举报

导航