我正在编写一个 servlet,它将检查服务器上的一个目录(Web 容器外部),并递归搜索某些文件(对于某些文件,我指的是具有特定扩展名和特定命名的文件习俗)。找到这些文件后,servlet 将返回一长串所有找到的文件(包括文件的完整路径)。我的问题是文件和目录太多,以至于我的 servlet 运行速度极慢。我想知道是否有针对此类问题的最佳实践或现有 servlet?简单地编译整个文件列表并在客户端通过 js/jquery 进行过滤是否更有效?
最佳答案
磁盘访问速度很慢,并且随着文件和目录数量的增加,您将很快达到这样一个程度,即在目录树中使用传统的递归搜索时您的 servlet 将毫无用处。如果您有大量并发用户同时执行相同的搜索,您将很快达到此限制。
相反,使用外部批处理作业生成文件列表要好得多,然后可以通过数据库调用或什至只解析包含由换行符分隔的所有文件名的文件将其读入 servlet。在 Linux 上使用“查找”是一种简单的方法:例如
find <path_to_directory> -name '*.bin' > list_files.txt
这将列出特定目录中每个以 .bin 结尾的文件名,并将其输出到名为 list_files.txt 的文件中。然后您的 servlet 可以读入该文件并从那里创建文件列表。
关于java - 列出目录(包括子目录)中所有文件的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479868/