java - 使用Java递归列出目录中的所有文件

标签 java file-io

我有这个函数可以递归地打印目录中所有文件的名称。问题是我的代码非常慢,因为每次迭代都必须访问远程网络设备。

我的计划是首先递归加载目录中的所有文件,然后使用正则表达式遍历所有文件以过滤掉所有我不想要的文件。谁有更好的建议?

public static printFnames(String sDir) {
    File[] faFiles = new File(sDir).listFiles();
    for (File file : faFiles) {
        if (file.getName().matches("^(.*?)")) {
            System.out.println(file.getAbsolutePath());
        }
        if (file.isDirectory()) {
            printFnames(file.getAbsolutePath());
        }
    }
}

这只是稍后的测试,我不会使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。

最佳答案

假设这是您将要编写的实际生产代码,那么我建议使用已经解决的此类问题的解决方案 - Apache Commons IO ,特别是 FileUtils.listFiles() .它处理嵌套目录、过滤器(基于名称、修改时间等)。

例如,对于您的正则表达式:

Collection files = FileUtils.listFiles(
  dir, 
  new RegexFileFilter("^(.*?)"), 
  DirectoryFileFilter.DIRECTORY
);

这将递归搜索与 ^(.*?) 正则表达式匹配的文件,并将结果作为集合返回。

值得注意的是,这不会比编写自己的代码快,它做的事情是一样的——用 Java 搜索文件系统只是很慢。不同的是,Apache Commons 版本不会有任何错误。

关于java - 使用Java递归列出目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534632/

相关文章:

java - 如何从 Hashtable<Integer,Hashtable<String,Integer>> h 获取值

java - 计算时间差(当天和第二天之间)

带有动画 GIF 的 JavaFX OutOfMemoryError

mysql - 将固定宽度、以空格分隔的 .text 文件加载到 mySQL 中

ios - 文件访问读取以前写入 NSDocumentDirectory 的图像失败

java - java 类上的接口(interface)

java - 需要帮助确定最大和最小用户输入

C中的循环(ring)缓冲区写入方法

java - 我如何保证我的文件尾随 Linux 缓存中的最新缓冲区

python - 将多个 numpy 数组流式传输到一个文件