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


    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);
        }
    
    }
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    字符编码相关
    函数之形参与实参
    文件操作模式
    函数对象,名称空间,作用域,和闭包
    吴裕雄天生自然SPRINGBOOT开发实战处理'spring.datasource.url' is not specified and no embedded datasource could be autoconfigured
    吴裕雄天生自然SPRINGBOOT开发实战处理XXXX that could not be found.
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot HTML表单登录
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot REST示例
    吴裕雄天生自然SpringBoot开发实战学习笔记处理 Could not write metadata for '/Servers'.metadata\.plugins\org.eclipse.core.resources\.projects\Servers\.markers.snap (系统找不到指定的路径。)
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot Tomcat部署
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458977.html
Copyright © 2020-2023  润新知