当前位置: 首页 > 面试题库 >

递归查找目录中的所有文本文件

楚修为
2023-03-14
问题内容

我正在尝试获取目录中所有文本文件的名称。如果目录中包含子目录,那么我也想在这些子目录中获取任何文本文件。我不确定如何继续执行任意数量的子目录。

现在,下面的代码仅获取当前目录中的所有文本文件以及该目录中的子目录。对于找到的每个子目录,它还会找到任何文本文件和更深的子目录。问题是,如果那些更深的子目录还有更深的子目录,那么我找不到所有的文本文件。这似乎是一个需要递归的问题,因为我不知道它会走多远。

到目前为止,这是我的代码:

File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
    System.out.println("Valid directory");

    File[] listOfFiles = rootDirectory.listFiles(); 
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                System.out.println("File: "+iName);
            }
        }
        if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory: "+iName);

            File[] subList = listOfFiles[i].listFiles();
            for (int j = 0; j < subList.length; j++) {
                String jName = subList[j].getName();
                if (subList[j].isFile()) {
                    if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
                        System.out.println("\tFile: "+jName);
                    }
                }
                if (subList[j].isDirectory()) {
                    System.out.println("\tDirectory: "+jName);
                }
            }
        }
    }
}
else System.out.println("Invalid directory");

编辑 :正常工作,谢谢Olaf Dietsche:

public void findFiles(File root, int depth) {
    File[] listOfFiles = root.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                for (int j = 0; j < depth; j++) System.out.print("\t");
                System.out.println("File: "+iName);
            }
        }
        else if (listOfFiles[i].isDirectory()) {
            for (int j = 0; j < depth; j++) System.out.print("\t");
            System.out.println("Directory: "+iName);
            findFiles(listOfFiles[i], depth+1);
        }
    }
}

问题答案:

这是一个递归问题

public void find_files(File root)
{
    File[] files = root.listFiles(); 
    for (File file : files) {
        if (file.isFile()) {
            ...
        } else if (file.isDirectory()) {
            find_files(file);
        }
    }
}


 类似资料:
  • 问题内容: 我正在编写一个Python备份脚本,需要在目录(及其子目录)中找到最旧的文件。我还需要仅将其过滤为* .avi文件。 该脚本将始终在Linux计算机上运行。有什么方法可以在Python中完成,还是运行一些Shell命令会更好? 目前,我正在努力获取特定分区上的可用空间,如果可用空间不足5 GB,我想开始删除最旧的文件,直到满足该条件为止。 问题答案: 嗯 Nadia的答案是接近你什么

  • 问题内容: 我的功能有点问题。我想在许多目录中获取所有文件。目前,我可以检索传入参数的文件中的文件。我想检索作为参数传递的文件夹中每个文件夹的html文件。我会解释,如果我把参数“测试”我检索“测试”的文件,但我想找回“测试/ 1 / * HTML。”,“测试/ 2 / /。 html的”: 结果:[1,2,3] 谢谢 ! 问题答案: 看起来npm软件包会为您提供帮助。这是一个如何使用它的示例:

  • 问题内容: 假设我有一个目录中,其中有3个符号连接其他目录 ,和。我想列出中的所有文件,包括在那些,和。 为了更通用,我想列出所有文件,包括目录中的符号链接文件。,等停止在符号链接上,而无需导航到它们以进一步列出。 问题答案: 该选项将完成您想要的。它取消引用符号链接。 因此,您的命令将是: 您也可以使用 该选项指示find跟随符号链接到目录。 在Mac OS X上使用 如已弃用。

  • 问题内容: 我有此功能,以递归方式打印目录中所有文件的名称。问题是我的代码很慢,因为它每次迭代都必须访问远程网络设备。 我的计划是先从目录中递归加载所有文件,然后再使用正则表达式遍历所有文件,以过滤掉我不需要的所有文件。有谁有更好的建议? 这只是稍后的测试,我将不使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。 问题答案: 假设这是你将要编写的实际生产代码,那么我

  • 我想列出指定目录中的所有文件以及该目录中的子目录。不应列出任何目录。 我该怎么解决这个?

  • 本文向大家介绍nodejs 递归拷贝、读取目录下所有文件和目录,包括了nodejs 递归拷贝、读取目录下所有文件和目录的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下nodejs 递归拷贝目录下所有文件和目录,具体代码如下所示: ps:下面看下Nodejs递归读取目录下的所有文件 递归读取当前目录下的所有文件。 总结 以上所述是小编给大家介绍的nodejs 递归拷贝、读取目录下所有文件和目