首页 > 解决方案 > Files.walkFileTree 与 Files.walk 在 Windows NTFS 上的性能

问题描述

我的应用程序需要定期扫描文件系统以处理文件。最初我是java.nio.file.Files.walk用来执行扫描的,但很快我就遇到了一些AccessDeniedException. 经过一些谷歌搜索后发现Files.walk,期望用户可以访问所探索的目录树,否则它会崩溃并停止,这使得该功能无法用于我的应用程序(它由各种系统上的许多人自托管) .

我将实现改为使用java.nio.file.Files.walkFileTree,这似乎工作得很好并且AccessDeniedException在用户代码中处理了。

然而,最近有人报告说,扫描时间从仅仅 12 秒(使用Files.walk)猛增到 80 分钟(使用Files.walkFileTree)!用户有大约 10,000 个文件夹和 120,000 个文件。它正在运行 Windows,并且磁盘正在使用 NTFS。其他具有相似数量的文件夹/文件但运行 Linux 的用户体验扫描时间低于 10 秒,无论使用何种方法。

我试图了解Files.walkFileTree在带有 NTFS 的 Windows 上使用会导致巨大性能损失的原因,但鉴于我无法访问运行 Windows 的测试系统,我无法调试代码以了解时间花在哪里。

您是否知道在 Windows NTFS 下遍历文件树是否存在已知问题?如果还有其他方法可以用来执行该任务?请记住,我需要处理AccessDeniedException用户代码。

标签: javantfs

解决方案


推荐阅读