欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 00:50:30 责任编辑: Author_N1

 

获取指定目录下的所有的java文件的绝对路径,包含子目录中的,使用队列解决栈内存溢出的情况
/*
* 通过递归的方式遍历文件夹中的子目录。
* 但是也有弊端:有可能出现栈内存溢出。
*
* 还有其他方式吗?
*
* 遍历当前目录是没有的,但是当前目录中是有子目录的,
* 而这个子目录中的层级还不确定,这时就没有办法进行不断的遍历。
* 是否可以将这些需要遍历的子目录先存储起来。
*
* 从容器中取出一个目录进行继续遍历,如果遇到子目录就继续将其进行该容器的存储。
* 让遍历的完的目录从容器中移除。
*
*
*/
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();
}
}
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 00:50:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/419/
本文WWW.DOC100.NET DOC100.NET版权所有。