黑马程序员技术交流社区

标题: 不用递归咋遍历文件夹,进来看看~ [打印本页]

作者: 愤怒的哈博兔    时间: 2015-8-5 18:34
标题: 不用递归咋遍历文件夹,进来看看~
/*
遍历文件夹,不用递归
思路:
        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();
        }       
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2