Java 以递归方式使用FileVisitor?
我在“旧”方式和“新”更快的1.7方式扫描目录之间进退两难 我需要扫描驱动器上的所有目录,并建立一个类似的树结构。在1.6中没有问题,只是速度慢了10倍,但是使用FileFisitor我遇到了一些大障碍 我如何事先知道一个目录包含多少项文件+子目录 旧方法:File[]files=path.listFiles;答案是files.length。 新方法:在回调函数public FileVisitResult previsitdirectypath path中,BasicFileAttributes bfa{},计数在哪里?Java 以递归方式使用FileVisitor?,java,performance,filesystems,java-7,Java,Performance,Filesystems,Java 7,我在“旧”方式和“新”更快的1.7方式扫描目录之间进退两难 我需要扫描驱动器上的所有目录,并建立一个类似的树结构。在1.6中没有问题,只是速度慢了10倍,但是使用FileFisitor我遇到了一些大障碍 我如何事先知道一个目录包含多少项文件+子目录 旧方法:File[]files=path.listFiles;答案是files.length。 新方法:在回调函数public FileVisitResult previsitdirectypath path中,BasicFileAttributes
为每个子目录使用可伸缩的数组列表肯定会影响性能和已经很大的内存占用,因此我需要使用常规的固定长度数组。我一直在考虑的另一种选择是使用可重用的主阵列,一旦知道长度,就将其复制到目标阵列。然而,这与递归性质以及目录和文件交错而不是分组的事实相冲突。我需要一个主数组来处理每个递归深度可能是无限的,除非我能让它先遍历目录,然后遍历我的研究表明无法完成的文件。我真的怀疑这个假设: 为每个子目录使用可伸缩数组ArrayList将 肯定会影响性能和已经很大的内存 足迹 你有什么依据?请注意,您的性能可能会受到限制,或者至少会受到文件系统访问速度的影响
我认为,对于这种性质的大多数问题,您应该尝试一种简单的可扩展解决方案,并真正确定任何问题,而不是事先做出假设。+1 ArrayList的成本不到磁盘访问成本的1000倍。