| 
 
| /* 遍历文件夹,不用递归
 思路:
 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();
 }
 }
 
 | 
 |