java 遍历文件系统,栈溢出

haxklryq 2018-05-07 08:24:09
java 遍历文件系统用递归,eclipse 直接卡住,代码如下,目录换成浅目录就可以
package tprem;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.io.File;


public class LoadAllFile {
LinkedBlockingQueue<String> qudirs = new LinkedBlockingQueue<String>();
LinkedBlockingQueue<String> qufile = new LinkedBlockingQueue<String>();
public static ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
int hasrun = 0;
int l = 0;

public void loadFiles(final String oriPath) throws InterruptedException {
File file = new File(oriPath);
File[] fileList = file.listFiles();

for(int i = 0; fileList != null && i < fileList.length; i++) {
if(fileList[i].isFile()) {
qufile.put(fileList[i].getAbsolutePath());
}
else if(fileList[i].isDirectory()) {
qudirs.put(fileList[i].getAbsolutePath());
}
}

/*if( qudirs.size()/100 - hasrun * 5 > 10&& hasrun < 10) {

hasrun ++;
cachedThreadPool.execute(new Runnable() {

@Override
public void run() {
try {
if(!qudirs.isEmpty())
loadFiles(qudirs.take());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
});
}*/

if(l++ > 1000) {

Thread t = Thread.currentThread();
String name = t.getName();
System.out.println("线程" + name + ":"+this. qudirs.size());
l = 0;
}

if(!qudirs.isEmpty())
loadFiles(qudirs.take());


}

public static void main(String [] args) {
LoadAllFile l = new LoadAllFile();
try {
l.loadFiles("F:\\");
int i = 0;
i++;
System.out.println(i);
cachedThreadPool.shutdown();
System.out.println(l.qufile.size());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}

}

...全文
702 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
首先,有点疑问,你报的错对应java文件的行都是空行 其次,我运行了一下,并没有任何问题,只能说你的文件系统文件太多了 最后给点建议:你最后一步 if(!qudirs.isEmpty()) loadFiles(qudirs.take()); 可以把迭代放到 else if(fileList[i].isDirectory()) { qudirs.put(fileList[i].getAbsolutePath()); } 这里面,增加遍历速度
haxklryq 2018-05-07
  • 打赏
  • 举报
回复
要怎么处理?网上没看到需要的信息

50,331

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧