获取指定目录下的全部的java文件的绝对路径,包含子目录中的,使用队列解决栈内存溢出的情况


获取指定目录下的所有的java文件的绝对路径,包含子目录中的,使用队列解决栈内存溢出的情况

/*<br />
     * 通过递归的方式遍历文件夹中的子目录。<br />
     * 但是也有弊端:有可能出现栈内存溢出。<br />
     * <br />
     * 还有其他方式吗?<br />
     * <br />
     * 遍历当前目录是没有的,但是当前目录中是有子目录的,<br />
     * 而这个子目录中的层级还不确定,这时就没有办法进行不断的遍历。<br />
     * 是否可以将这些需要遍历的子目录先存储起来。<br />
     * <br />
     * 从容器中取出一个目录进行继续遍历,如果遇到子目录就继续将其进行该容器的存储。<br />
     * 让遍历的完的目录从容器中移除。<br />
     * <br />
     * <br />
     */<br />

public static void getAllFiles(File dir) {

System.out.println(dir);
//1,创建一个队列。
Queue<File> queue = new Queue<File>();

//2,对目录进行当前文件夹和文件的遍历。
File[] files = dir.listFiles();
//将子目录存储到队列中。
for(File file : files){
if(file.isDirectory()){
queue.add(file);
}else{
System.out.println(file);
}
}

//遍历队列。
while(!queue.isEmpty()){
// System.out.println("queue:"+queue.get());

File subDir = queue.get();
System.out.println("dir:"+subDir);

File[] subFiles = subDir.listFiles();
for(File subFile : subFiles){

if(subFile.isDirectory()){
queue.add(subFile);
}else{
System.out.println(subFile);
}
}

}

}


/
* 创建一个队列。
* 先进先出。
* @author Teaching
*
* @param <E>
*/
class Queue<E>{

private LinkedList<E> link;
public Queue(){
link = new LinkedList<E>();
}

/

* 添加元素。
*/
public void add(E o){
link.addFirst(o);
}

/
* 取元素。
*/
public E get(){
return link.removeLast();
}

/

* 判断队列是否为空。
*/
public boolean isEmpty(){
return link.isEmpty();
}
}

Web开发 程序开发 Web前端

护庭师·妖妖梦 16 years, 3 months ago

Your Answer