感觉主要subs[i].listFiles()调用比较花时间,
不知道你用subs[i].listFiles()!=null这个判断的目的是什么,
如果替换成subs[i].exist或者isDirectory不知道符合不符合你的要求,
要是符合的话最好换了吧。
如果实在不能替换的话,至少可以定义一个变量保存它的结果,这样每次递归可以少调一次,能节省不少时间呢。
还有一点,把所有东西都放到StringBuffer s中也会是一个瓶颈,
最好是StringBuffer中的数据达到一定长度的时候就把它输出到其他的地方,
比如文件。
楼主的问题在几个星期前我也想在这里提交。
我在几个月前写的一个递归读取一个文件夹下面的所有子文件夹。
情况是这样的:
当前文件夹:
e:\图片\
下面有几十个多级子文件夹,每个文件夹里有5千张图片。
通过递归的方法,显示e:\图片\下的所有子文件夹结构,需要8 - 15分钟。
这个速度让人无法接受。
我查了一下原因,时间主要在 file.listFile()和isDirectory()是消耗掉了。
因为只有几十个子文件夹,但是在JAVA里要对比几十万张图片,这个对比图片的操作太费时间了,我一时也找不到更好的办法。
如果 file.listFile()如果能单独列出文件夹就好了。
补充,当文件系统成为往事的时候,使用tar格式的文件系统会比较好。
网上有一个关于apache commons tar格式文件和文件系统访问的benchmark