0
我处于“旧”方式和“新”快速1.7扫描目录方式之间的两难境地。以递归方式使用FileVisitor?
我需要扫描驱动器上的所有目录并构建一个类似的树结构。在1.6中没有问题(除了它慢了10倍),但是使用FileFisitor我有一些很大的障碍。
如何事先知道目录包含多少项目(文件+子目录)?
- 老路:
File[] files = path.listFiles();
和files.length
就是答案。 - 新办法:在回调函数
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa){}
,计数在哪里?
使用可伸缩的阵列(ArrayList的)用于每个子目录肯定会伤害性能和已大内存占用,因此我需要使用常规的固定长度的数组。我一直在琢磨的另一种选择是使用可重用的主数组,并且一旦我知道了长度,就将它复制到目标数组中。然而这与递归性质冲突,以及目录和文件被交叉而不是分组的事实。我需要一个主数组,每个递归深度(可能无限),除非我可以使其先行走目录,然后文件(我的研究表明无法完成)。
ArrayList的+1成本小于磁盘访问成本的1000分之一。 –