怎么快速进入java目录_如何在Java中快速检索目录列表?

kdgregory..

6

实际上有一个原因让你得到讲座:这是你问题的正确答案.这是背景,因此您可以在现场环境中进行一些更改.

第一:目录存储在文件系统中; 将它们视为文件,因为它们正是它们的本质.遍历目录时,必须从磁盘中读取这些块.每个目录条目都需要足够的空间来保存文件名,权限以及有关在磁盘上找到该文件的位置的信息.

第二:目录不存储任何内部排序(至少,不在我使用目录文件的文件系统中).如果您有150,000个条目和2个子目录,那么这2个子目录引用可以是150,000中的任何位置.你必须迭代才能找到它们,没有办法解决这个问题.

所以,让我们说你无法避免大目录.您唯一真正的选择是尝试将包含目录文件的块保留在内存缓存中,这样您每次访问时都不会访问磁盘.您可以通过在后台线程中定期迭代目录来实现此目的 - 但这会导致磁盘上的过度负载,并干扰其他进程.或者,您可以扫描一次并跟踪结果.

另一种方法是创建分层目录结构.如果你查看商业网站,你会看到像/1/150/15023.html这样的网址 - 这意味着保持每个目录的文件数量很小.可以将其视为数据库中的BTree索引.

当然,您可以隐藏该结构:您可以创建一个文件系统抽象层,该层采用文件名并自动生成可以找到这些文件名的目录树.

我不是那个支持它的人,但你对文件系统的内部工作做出了很多声明,没有任何参考,甚至不知道实际使用的是哪个文件系统.这让我对你的帖子的正确性有点怀疑,虽然我很想被证明是错的. (3认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值