gpt4 book ai didi

java - 如何在 Java 中快速检索目录列表?

转载 作者:IT老高 更新时间:2023-10-28 20:57:35 25 4
gpt4 key购买 nike

假设一个非常简单的程序列出了给定目录的所有子目录。听起来很简单?除了在 Java 中列出所有子目录的唯一方法是使用 FilenameFilter结合 File.list() .

这适用于琐碎的情况,但是当文件夹有 150,000 个文件和 2 个子文件夹时,它会愚蠢地在那里等待 45 秒迭代所有文件并测试 file.isDirectory()。有没有更好的方法来列出子目录??


PS。对不起,请保存关于同一目录中文件过多的讲座。我们的生活环境将此作为要求的一部分。

最佳答案

正如已经提到的,这基本上是一个硬件问题。磁盘访问总是很慢,而且大多数文件系统并不是真正设计用于处理包含这么多文件的目录。

如果您出于某种原因必须将所有文件存储在同一目录中,我认为您必须维护自己的缓存。这可以使用本地数据库来完成,例如 sqlite、HeidiSQL 或 HSQL。如果您想要极致性能,请使用 java TreeSet 并将其缓存在内存中。这至少意味着您不必经常阅读目录,并且可以在后台完成。您可以使用系统 native 文件更新通知 API(Linux 上的 inotify)订阅目录更改,从而进一步减少刷新列表的需要。

这对你来说似乎是不可能的,但我曾经通过将文件“散列”到子目录中解决了一个类似的问题。就我而言,挑战是存储数百万张带有数字 ID 的图像。我构建的目录结构如下:

images/[id - (id % 1000000)]/[id - (id % 1000)]/[id].jpg

这对我们来说效果很好,这是我推荐的解决方案。你可以做一些类似于字母数字文件名的事情,只需取文件名的前两个字母,然后是接下来的两个字母。我也做过一次,它也完成了这项工作。

关于java - 如何在 Java 中快速检索目录列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1034977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com