0

我在“旧”方式和“新”更快的 1.7 扫描目录方式之间进退两难。

我需要扫描驱动器上的所有目录并构建类似的树结构。在 1.6 中没有问题(除了慢了 10 倍),但使用 FileFisitor 我有一些大障碍。

我如何事先知道一个目录包含多少项(文件+子目录)?

  • 老办法:File[] files = path.listFiles();​​就是files.length答案。
  • 新方法:在回调函数public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa){}中,计数在哪里?

为每个子目录使用可伸缩数组(ArrayList)肯定会损害性能和已经很大的内存占用,因此我需要使用常规的固定长度数组。我一直在思考的另一种方法是使用可重用的主数组,一旦我知道长度,将其复制到目标数组。然而,这与递归性质以及目录和文件交错而不是分组的事实相冲突。对于每个递归深度(可能是无限的),我都需要一个主数组,除非我可以让它先遍历目录,然后是文件(我的研究表明无法完成。)

4

1 回答 1

7

我真的会质疑这个假设:

为每个子目录使用可伸缩数组 (ArrayList) 肯定会损害性能和已经很大的内存占用

你有什么依据?请注意,访问文件系统的速度可能会限制(或至少影响)您的性能。

我认为(至于大多数此类性质的问题)您尝试一个简单的可扩展解决方案并确定任何真实问题,而不是提前做出假设。

于 2012-11-19T10:43:08.083 回答