如何在 Java 中迭代目录及其子目录中的文件?

2024-03-29

我需要获取目录中所有文件的列表,包括所有子目录中的文件。使用 Java 完成目录迭代的标准方法是什么?


您可以使用File#isDirectory() https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/File.html#isDirectory()测试给定文件(路径)是否是目录。如果这是true,然后你只需再次调用相同的方法File#listFiles() https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/File.html#listFiles()结果。这就是所谓的递归 https://en.wikipedia.org/wiki/Recursion_(computer_science).

这是一个基本的启动示例:

package com.stackoverflow.q3154488;

import java.io.File;

public class Demo {

    public static void main(String... args) {
        File dir = new File("/path/to/dir");
        showFiles(dir.listFiles());
    }

    public static void showFiles(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory: " + file.getAbsolutePath());
                showFiles(file.listFiles()); // Calls same method again.
            } else {
                System.out.println("File: " + file.getAbsolutePath());
            }
        }
    }
}

请注意,这对StackOverflowError https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StackOverflowError.html当树的深度超过 JVM 堆栈所能容纳的深度时。如果您已经使用 Java 8 或更高版本,那么您最好使用Files#walk() https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/Files.html#walk(java.nio.file.Path,java.nio.file.FileVisitOption...)相反,它利用尾递归 https://en.wikipedia.org/wiki/Tail_call:

package com.stackoverflow.q3154488;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DemoWithJava8 {

    public static void main(String... args) throws Exception {
        Path dir = Paths.get("/path/to/dir");
        Files.walk(dir).forEach(path -> showFile(path.toFile()));
    }

    public static void showFile(File file) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getAbsolutePath());
        } else {
            System.out.println("File: " + file.getAbsolutePath());
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中迭代目录及其子目录中的文件? 的相关文章

  • 增加字符串的最后一个字母

    这是我希望 Java 的 String 类有一个 ReplaceLast 方法的地方 但它没有 而且我的代码得到了错误的结果 我正在编写一个程序 该程序在数据结构中搜索与字符串前缀匹配的任何项目 但是 由于我使用的是迭代器 iter nex
  • 部署程序集:当前显示的页面包含无效值

    我从 Sourceforge 导入了一个 Java Web 应用程序 我花了三个工作周的时间来消除项目名称和包上附加的所有红叉 但现在我无法使该应用程序在我的 Eclipse 和 tomcat6 开发环境上运行 在项目属性中 当我尝试设置部
  • Java中的整数除法[重复]

    这个问题在这里已经有答案了 这感觉像是一个愚蠢的问题 但我在 Java 文档中找不到答案 如果我声明两个 int 然后将它们相除 到底发生了什么 他们是否转换为floats doubles首先 划分 然后投射回integer 或者除法是作为
  • 如何替换引号之间出现的任何单词

    我需要能够替换所有出现的单词 and 仅当它出现在单引号之间时 例如 将字符串中的 and 替换为 XXX This and that with you and me and others and not her and him 结果是 T
  • Java中printf左对齐

    当我运行该程序时 阶乘值右对齐 有没有办法让它左对齐 同时保持中间 50 个空格 public class Exercise 5 13 public static void main String args int numbers 1 2
  • java中数字字符串间隔排序

    我正在与一些人一起上一个人课 其中有姓名 年龄范围等详细信息 年龄区间为 0 5 6 10 11 30 31 45 46 50 50 100 100 110 我正在上 Person 课name ageBand字符串间隔及其参数化构造函数 g
  • 如何将值从 recyclerview 项目传递到另一个活动

    当我们单击 recyclerview 项目时 我试图将 recyclerview 项目中的值传递给另一个活动 这里我使用的是OnItemTouchListener 我从 JSON 检索数据并将其解析为 ArrayList 我保存了5个参数
  • Spring框架中的DAO和Service层到底是什么?

    Spring框架中的DAO和Service层到底是什么 我正在寻找理论答案 就 Spring 而言 没有区别 按照惯例 您可以使用以下方式标记 DAO 类 Repository和服务 Service 前者还进行一些持久层异常转换 既然您在理
  • 将分区扩展到另一级

    根据下图来自春季批量文档 http docs spring io spring batch reference html scalability html partitioning 主步骤被划分为六个从步骤 它们是主步骤的相同副本 我的问题
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • 在 Eclipse 中编写链接特定行的注释

    我正在 Java 中使用 Eclipse 并且处理很长的类 我需要这样的功能 在方法的顶部注释中 例如 有一个由该方法执行的操作列表 对于列出的每个操作 我想将注释的一部分 超链接 到相关代码的特定行 然后使用 Ctrl Click 到该行
  • Java如何处理IF语句和效率

    我只是好奇 Java 实际是如何工作的if声明 注意 当我在下面说 组件 时 我指的是语句检查的各个部分 例如a b c 哪个在计算方面更有效 if a b c do stuff or if a if b if c do stuff 我之所
  • 序列化/反序列化 LinkedHashMap (android) java

    所以我想将 LinkedHashMap 传递给意图 SEND THE MAP Intent singlechannel new Intent getBaseContext singlechannel class singlechannel
  • 如何处理MaxUploadSizeExceededException

    MaxUploadSizeExceededException当我上传的文件大小超过允许的最大值时 会出现异常 我想在出现此异常时显示错误消息 如验证错误消息 我该如何处理这个异常 以便在 Spring 3 中执行类似的操作 Thanks 这
  • JToolBar 放回 GridBagLayout 时出现 IllegalArgumentException

    为什么这段代码会抛出一个IllegalArgumentException当工具栏被拖离 GUI 然后关闭 将其返回到 GUI 时 我可以理解为什么在没有约束的情况下添加组件可能是不合适的 但在这种情况下 工具栏最初添加到面板 使用GridB
  • 如何使用放心发送Content-Type表单数据请求?

    我需要使用 Rest Assured 调用表单数据类型 API 这是我的代码 private Map
  • Java 中的引用变量里面有什么?

    我们知道对象引用变量保存表示访问对象的方式的位 它不保存对象本身 但保存诸如指针或地址之类的东西 我正在阅读 Head First Java 第 2 版 一书 书中写道 第 3 章第 54 页 在 Java 中我们并不真正知道什么是 在引用
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT
  • 如何使用 GWT 2.4 在服务器端动态创建 UI

    我正在尝试使用 Google Web Toolkit v2 4 创建用户界面 由于多种原因 我需要在运行时指定服务器上接口的内容 我的意思不仅仅是按钮需要动态标签等 而是整个 UI 需要在运行时创建 我的大部分 UI 都可以指定为直接的 H

随机推荐

  • 访问 firebase firestore 数据库仪表板是否会被视为读取操作?

    我现在正处于该项目的开发阶段 目前该项目仅使用一个 Android 应用程序作为前端 Android 使用限制和分页进行查询 但阅读的文档总数远远超出了预期 我试图弄清楚这一点 为什么即使用户只有一个 我 阅读的文档数量却如此之大 如果阅读
  • 带红色圆圈的 Intellij Idea 文件

    我的 Intellij Idea 在 Project Explorer 中的文件名都有一个红色小圆圈 上面写着 J 那代表什么 IntelliJ 识别出这是一个 java 文件 但它没有标记为项目源的一部分 检查您的项目是否遵循 Maven
  • 如何防止在 Vim 中遍历跳转列表时离开当前缓冲区?

    I frequently have several buffers open in my Vim session This means that my jump list stores locations from several buff
  • 使用 Jest 模拟基于承诺的请求

    我正在尝试使用 Jest 对函数进行单元测试 但在处理 jest 模拟模块时遇到了一些麻烦 相当于 Nodejs 世界中的 rewire 或 proxyquire 我实际上正在尝试测试是否已使用一些参数在模拟模块上调用了间谍 这是我要测试的
  • 在 ASP.NET MVC 的 Windsor 配置中,控制器的生活方式是否应该始终是瞬态的?

    我遇到了一个问题 我认为 Html DropDownList 会在我第一次提交表单时回发所选值 但每个后续回发只会发布初始回发中的数据 因此 我将生活方式 瞬态 添加到为温莎城堡配置控制器的组件元素中 这解决了问题 但当然使回发需要更长的时
  • SQLAlchemy:“NoneType”对象没有属性“drivername”

    我正在尝试将我的 Flask 应用程序连接到本地 MySQL 数据库进行测试 我创建了一个 Flask 对象和一个类来表示成功连接后创建的示例表 这些是我的项目的本地环境变量 env LOCAL MYSQL URL mysql Userna
  • 如何从文件中提取多行的电子邮件标题

    我正在尝试在 Linux 上使用 sed 从电子邮件文件中提取 To 标头 问题是 To 标头可能位于多行上 e g To email protected cdn cgi l email protection email protected
  • 在Excel中使用VBA查找活动单元格的列标题名称

    我有一个从数据列表创建的表 如何找到每列的标题文本 当我选择活动单元格的标题时 它会高亮为橙色 但我想使用 Visual Basic 检索该值 我能够找到 Excel 工作表的地址 但我需要表格的列标题 Private Sub Worksh
  • Hibernate 验证器验证约束 if @Constraint(validated by = {})

    我有一个 Spring Web 应用程序 它使用 hibernate 验证器进行验证 我有位于不同项目中的约束注释 我需要在我的 Spring 项目中拥有针对这些约束的验证器 因为我需要一些服务来执行验证 所以情况是 我无法将约束验证器放在
  • 使用R识别PDF表格

    我正在尝试从一些 pdf 报告内的表格中提取数据 我看过一些使用 pdftools 和类似软件包的示例 我成功地获取了文本 但是 我只想提取表格 有没有办法使用 R 来识别和提取表格 很好的问题 我最近也在想同样的事情 谢谢 我做到了 与制
  • HP (Mercury) 质量中心的高质量替代品? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从嵌套列中提取 json 到数据帧

    我正在从 TD Ameritrade API 中提取股票数据 并且希望将其存储在 DataFrame 中 从 API 中 我得到一个嵌套的 JSON 对象 当我将其放入数据框中时 我得到 4 列 索引 蜡烛 空 符号 然而 蜡烛内部是一个字
  • 在 Windows 上通过 SSH 进行 Git 推送不起作用

    我有一个谜要问你们 在这个问题上苦苦挣扎了半天之后 我需要你的经验来启发我在 Windows 上使用 msysgit 来使用 git 上下文 视窗8 msysgit 最新版本 Using SSH密钥认证 Pagent使用 valid 处理
  • 如何从同一类型的另一个方法中使用 &mut self 调用方法?

    我有一个Scanner结构体有一个scan mut self 方法实施 看起来像这样 pub struct Scanner input String output Vec
  • 如何将 std::variant 作为 VARIANT* 传递给 ExecWB?

    我看过这篇关于使用的文章std variant https en cppreference com w cpp utility variant 这是因为以下代码引发了代码分析警告 void CChristianLifeMinistryHtm
  • Zend Framework:重用从 Zend_Db_Select::getPart() 返回的 WHERE 子句

    我有一个包含 WHERE 的 SELECT 对象 我可以使用返回 WHEREgetPart Zend Db Select WHERE 这会返回类似这样的内容 array 0 gt string clienttype agent 1 gt s
  • 缓存问题 MySQL 或文件系统

    当您缓存检索的数据时 是否存在明显的速度性能差异 从数据库到文件系统上的文件 例如 htdocs cache cachefile 而不是直接从 MySQL DB 获取它 多谢 这在很大程度上取决于您的磁盘IO 数据库的大小 数据库配置 数据
  • Python“缓冲区”类型有什么用?

    有一个buffer输入Python 但是我该如何使用它呢 In the Python 文档关于buffer https docs python org 2 7 library functions html buffer 描述为 buffer
  • UISplitViewController 仅详细信息 inputAccessoryView

    我试图在消息输入工具栏方面模仿Apple的iMessage应用程序 苹果有一个UIToolbar这是一个的输入附件视图UITextView它包含 而且还inputAccessoryView的实际视图 这样 工具栏始终存在 并且当键盘出现时
  • 如何在 Java 中迭代目录及其子目录中的文件?

    我需要获取目录中所有文件的列表 包括所有子目录中的文件 使用 Java 完成目录迭代的标准方法是什么 您可以使用File isDirectory https docs oracle com en java javase 21 docs ap