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


    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);
        }
    
    }
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    Java:day11
    Java:day10
    Java:day9
    Java:day8
    纯虚函数和抽象类
    C++的虚拟继承
    派生类构造函数、析构函数的定义和调用次序
    c++的继承方式——公有、保护、私有
    操作系统中系统调用的执行过程
    C++的类
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458977.html
Copyright © 2020-2023  润新知