永发信息网

java File类,递归读取本地目录,速度特别慢。

答案:3  悬赏:50  手机版
解决时间 2021-02-08 10:33
说明:
递归读取文件名,组装成html标签,并封装到StringBuffer中,
最后输出到前台界面,展示出Tree样式。

问题:展示到前台时,目录比较深的话,速度非常之慢。

请问:有什么优化策略?

public static String create(String dir) {

private static void saveXmlTree(File file,StringBuffer s) {

if (file == null || !file.exists()) {
return ;
}

File[] subs = file.listFiles();
if(subs==null) return;

s.append("");
}
最佳答案
感觉主要subs[i].listFiles()调用比较花时间,
不知道你用subs[i].listFiles()!=null这个判断的目的是什么,
如果替换成subs[i].exist或者isDirectory不知道符合不符合你的要求,
要是符合的话最好换了吧。
如果实在不能替换的话,至少可以定义一个变量保存它的结果,这样每次递归可以少调一次,能节省不少时间呢。

还有一点,把所有东西都放到StringBuffer s中也会是一个瓶颈,
最好是StringBuffer中的数据达到一定长度的时候就把它输出到其他的地方,
比如文件。
全部回答
补充,当文件系统成为往事的时候,使用tar格式的文件系统会比较好。 网上有一个关于apache commons tar格式文件和文件系统访问的benchmark 再看看别人怎么说的。
楼主的问题在几个星期前我也想在这里提交。 我在几个月前写的一个递归读取一个文件夹下面的所有子文件夹。 情况是这样的: 当前文件夹: e:\图片\ 下面有几十个多级子文件夹,每个文件夹里有5千张图片。 通过递归的方法,显示e:\图片\下的所有子文件夹结构,需要8 - 15分钟。 这个速度让人无法接受。 我查了一下原因,时间主要在 file.listFile()和isDirectory()是消耗掉了。 因为只有几十个子文件夹,但是在JAVA里要对比几十万张图片,这个对比图片的操作太费时间了,我一时也找不到更好的办法。 如果 file.listFile()如果能单独列出文件夹就好了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
衢州农家乐有哪些景点
双摇电吉他琴桥上连接弦调节弦高的那一整个部
有一个自然数a,它符合下面的条件,a能整除11
android 手机上本地应用程序和第三方应用程序
康美人生药膳馆这个地址在什么地方,我要处理
重庆星月精品酒店地址在什么地方,我要处理点
想去南京打拼!~
用手捏会响的塑料薄膜~有点像香烟盒的包装纸
重庆泽牧酒店地址有知道的么?有点事想过去
山门村我想知道这个在什么地方
重庆甜心酒店地址好找么,我有些事要过去
刷墙时刷钢化墙漆有什么好处?
怎么快速从汽车菜鸟变成一个了解汽车性能的人
电信运营支撑系统建设和实践的最终目标是帮助
重庆全家福酒店地址好找么,我有些事要过去
推荐资讯
平安普惠货款没还会影响招商银行信用卡提升额
拜托看下静电喷塑机工作时突然不出粉末了变有
2019年中学教材全练七年级英语上册外研版天津
武汉久吉绝味鸭脖地址有知道的么?有点事想过
小明喝一杯牛奶,第一次喝了3/1后加满水,又喝
红丰超市这个地址在什么地方,我要处理点事
苹果平板pro可以跟投影仪连接吗?
善舞街舞工作室地址好找么,我有些事要过去
咖啡陪你华联商厦店地址在哪,我要去那里办事
明天就要开学了,怎么办啊?我好忧伤啊!
对一个女生表白之后,她既没有同意也没有拒绝
海尔le39a700k怎么连接网线
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?