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

2025-01-01 22:38:51
推荐回答(3个)
回答1:

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

还有一点,把所有东西都放到StringBuffer s中也会是一个瓶颈,
最好是StringBuffer中的数据达到一定长度的时候就把它输出到其他的地方,
比如文件。

回答2:

楼主的问题在几个星期前我也想在这里提交。

我在几个月前写的一个递归读取一个文件夹下面的所有子文件夹。
情况是这样的:

当前文件夹:
e:\图片\

下面有几十个多级子文件夹,每个文件夹里有5千张图片。

通过递归的方法,显示e:\图片\下的所有子文件夹结构,需要8 - 15分钟。
这个速度让人无法接受。

我查了一下原因,时间主要在 file.listFile()和isDirectory()是消耗掉了。

因为只有几十个子文件夹,但是在JAVA里要对比几十万张图片,这个对比图片的操作太费时间了,我一时也找不到更好的办法。

如果 file.listFile()如果能单独列出文件夹就好了。

回答3:

补充,当文件系统成为往事的时候,使用tar格式的文件系统会比较好。
网上有一个关于apache commons tar格式文件和文件系统访问的benchmark