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