获取指定目录下的全部的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();
}
}