A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
遍历文件夹,不用递归
思路:
        1.可以通过对每一个目录进行for循环,但是目录层级很多,for会死掉
        2.每遍历到一个目录,不对其进行遍历,而是临时存储起来.
        相当于打所有目录无论同级不同级都存储起来
        注意:遍历完的容器中的目录需要删除,释放容器空间;
        3.遍历容器时取到就是目录,然后对目录遍历即可
        4.从容器中取出目录遍历时发现内部还有目录,一样将这些目录存储到容器中
        5.只要不断的遍历这个容器就好了
*/
/*
队列结构,先进先出.
*/
class FileTest2{

        File dir = new File("E://javaBase");
        Queue<File> queue = new Queue<File>();
        //1.对dir进行当前目录的遍历
        File[] files = dir.listFiles();
        for(File file : files){
        //2.如果有子目录存储到队列中
                if(file.isDirectory()){
                        queue.myAdd(file);
                }else{
                        System.out.println("\t\t"+file.getName());
                }
        }       
        //3.遍历队列容器,因为子目录都在队列中
        while(!queue.isNull()){
                File subFiles = queue.myGet();//从队列中取出子目录
                System.out.println(subFiles.getName());
                //4.遍历子目录
                File[] subFiles = subDir.listFiles();
                for(File subFile : subFiles){
                        if(subFile.isDirectory()){//如果子目录中还有子目录,继续存储到队列中
                                queue.myAdd(subFile);
                        }else{
                                System.out.println(subFile.getName());
                        }
                }
               
        }

}
class Queue{
        private LinkedList lint;
        //提供了构造队列对象的构造器
        public Queue(){
                link = new LinkedList();
        }
        //添加元素的方法
        public void myAdd(Object obj){
                link.addFirst(obj);
        }
        //获取方法
        public Object myGet(){
                return link.removeLast();
        }
        //判断队列是否有元素
        public boolean isNull(){
                return link.isEmpty();
        }       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马