java - 列出目录(包括子目录)中所有文件的最有效方法是什么?

标签 java file servlets recursion

我正在编写一个 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/

相关文章:

java - 为什么 POST 不支持字符集,但 AJAX 请求却支持? Tomcat 6

java - jsp中页面加载时的get方法

java - 如何在 Android 中使用 DefaultHttpClient 制作持久性 Cookie?

java - 如何使用utf-8导出Excel CSV并读入Java?

java - 如何在 Spring Boot 中使用 Thymeleaf 将值传递给 HTML 模板的变量

java - JGit 中 DirCacheEditor 的无效路径异常

file - 使用powershell计算子文件夹中具有特定名称的文件数量

php - 获取目录路径内的文件名

C++从文本文件中读取并分离成 vector

java - 在 NetBeans WebApp 中将库与 JNI 结合使用