JAVA 遍历目标文件下的所有文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/78955697

一、遍历文件夹下的所有文件

public class File05{
    // 需求:便利目标文件夹下的所有文件(文件及文件夹)
    public static void main(Stringp[] args){
        //  需求分析
        //  1.拿到目标文件对应的File 对象
        //  2.遍历该目标文件夹的一级子目录
        //  3.在遍历一级子目录过程中,会出现文件与文件夹(有无子目录)两种不同类型
        //  对象、应接着对文件夹进行进一步遍历,如此重复 2 3 步骤

        //  拿到目标文件对应的 File 对象
        String rPath = "./file04";
        //  转换成File 对象
        File target = new File(rPath);
        }
    private static void traverse(File file){
        //  代码的健壮性考虑
        //  如果文件或者空文件夹,无需遍历直接结束方法(空return)
        if(file.isFile()||file.list().length == 0){
            return;
        }
        //  遍历当前file 一级子目录
        for(File f : file.listFiles()){
            // 将遍历到的一级子目录均打印出来
            System.out.print(f.getName());
            //  如果是文件夹 便进行进一步遍历
            if(f.isDirectory()){
                traverse(f);
            }
        }
    }
}

二、使用队列方式遍历目标文件夹

//  通过队列方式遍历目标文件夹
//  需求分析:
//  1.需一个遍历方法
//  方法的修饰词:private static
//  方法返回值:存放所有子文件的单例集合Collection
//  方法参数列表:文本文件的File对象
//  方法的实现体:通过队列结构一层一层遍历

public class File06{
    public static void main(String[] args){
        //  解决方法的需求
        File file = new File("./file04");
        //  接收方法的值(执行结果)
        Collection<File> collection = traverse(file);
        //  处理接收到的结果  遍历出来
        for(File f: collection){
            System.out.println(f.getName());
        }
    }
    private static Collection<File> traverse(File file){
        //  健壮性
        //  判断是否是文件 或者 是否为空文件夹
        if(file.isFile()||file.list().length == 0){
            return null;
        }
        //  1.拥有存储所有遍历结果的集合
        Collection<File> collection = new ArrayList<>();
        //  2.拥有队列功能结构的对象
        //  队列功能:先进先出(集合|可变|易操作)
        LinkedList<File> folders = new LinkedList<>();
        //  遍历一级目录
        for(File f : file.listFiles()){
            collection.add(f);
            //  将一级目录文件夹存储到队列当中
            //  判断 如果是文件夹  添加到folders中
            if(f.isDirectory()){
                folders.add(f);
            }
        }
        //  通过队列结构  一层一层目录
        //  便利的对象是谁: 从队列中取出的第一个
        //  便利的出口: 队列为空
        while(!folders.isEmpty()){
            //  将队列中的第一个元素取出来
            File folder = folders.pop();
            //  将该级目录全部储存
            for(File file2 : folders){
            collcetion.add(file2);
                // 将该级目录文件夹存储到队列
                if(file2.isDirectory()){
                    folders.add(file2);
                }
            }
        }
        return collection;
    }

    //  优化队列遍历
    public static Collection<File> traverseSup(File){
        //  健壮性
        //  判断是否为文件 或者是否稳空文件夹
        if(file.isFile()||file.list().length == 0){
            return null;
        }
        //  1.拥有存储所有遍历结果的集合
        Collection<File> collection = new ArrayList<>();
        //  2.拥有队列功能结构的对象
        //  队列功能: 先进先出
        LinkedList<File> folders = new LinkedList<>();
        //  先将目标文件添加进队里
        folders.add(file);
        //  所有下叙遍历操作第一次就是遍历目标文件夹
        while(!folders.isEmpty()){
            // pop() 从队列中取出一个元素(取出的会从队列中移除)
            File folder = folders.pop();
            for(File f : folder.listFiles()){
                collection.add(f);
                //  将子目录添加到队列中
                if(f.isDirectory()){
                    folders.add(f);
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40990836/article/details/78955697