Java实现递归读取文件夹下的所有文件

 更新时间:2024年02月19日 11:27:29   作者:澄风  
这篇文章主要为大家详细介绍了如何利用Java实现递归读取文件夹下的所有文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

代码

package file;

import org.apache.commons.lang3.StringUtils;
import org.junit.Test;

import java.io.File;
import java.util.Objects;

/**
 * FlattenDirFiles
 *
 * @author allens
 * @date 2024/2/19
 */
public class FlattenDirFiles {

    // 文件数量
    private int fileCount;

    // 文件夹总容量大小
    private long totalSize;

    @Test
    public void testMain () {
        File file = new File("/Users/yueyu/Documents/service");
        File[] files = file.listFiles();

        readAllFile(files, 0);
        System.out.println("--------------------------------------------------------");
        System.out.printf("count: %s, size: %s M", fileCount, totalSize / 1024 / 1024);
        System.out.println();
    }

    /**
     * 递归读取文件夹下的所有文件
     * @param files
     */
    public void readAllFile (File[] files, int indent) {
        for (File f : files) {
            if (f.isDirectory()) {
                System.out.printf("%s|-%s_D%n", StringUtils.repeat(" ", indent * 2), f.getName());
                readAllFile(Objects.requireNonNull(f.listFiles()), indent + 1);
            } else {
                totalSize += f.length();
                System.out.printf("%s|-%s-%s_%dM_F%n",
                        StringUtils.repeat(" ", indent * 2),
                        f.getParentFile().getName(),
                        f.getName(),
                        f.length() / 1024 / 1024);
                fileCount ++;
            }
        }
    }

}

这段代码是一个 Java 类,名为 FlattenDirFiles,它提供了一个方法 readAllFile 来递归地读取指定文件夹下的所有文件和子文件夹,并输出它们的名称以及大小信息。代码中使用了 JUnit 的 @Test 注解,说明其中包含了测试代码。以下是对这段代码的总结和解析:

成员变量:

  • fileCount:记录文件数量。
  • totalSize:记录文件夹总容量大小。

测试方法:

testMain:这是一个测试方法,用于测试 readAllFile 方法。它首先指定了一个文件夹路径 /Users/yueyu/Documents/service,然后调用 readAllFile 方法来读取该文件夹下的所有文件和子文件夹,并输出文件数量和总大小信息。

递归方法:

readAllFile:这是一个递归方法,用于递归地读取文件夹下的所有文件和子文件夹。它接收一个 File[] 类型的参数 files,表示当前文件夹下的所有文件和子文件夹,以及一个整数参数 indent,表示当前文件夹在递归树中的深度。

对于 files 数组中的每个文件 f,如果是文件夹,则输出文件夹名称,并递归调用 readAllFile 方法,传入该文件夹下的所有文件和子文件夹,并将缩进 indent 加 1。

如果是文件,则累加其大小到 totalSize 中,并输出文件的名称和大小信息,同时增加 fileCount。

代码执行:

在测试方法 testMain 中,首先创建一个 File 对象表示指定的文件夹路径,并获取该文件夹下的所有文件和子文件夹。
然后调用 readAllFile 方法来递归地读取文件夹下的所有文件和子文件夹,并输出文件数量和总大小信息。
总的来说,这段代码实现了对指定文件夹的递归遍历,输出了每个文件和文件夹的名称以及大小信息。通过递归的方式,可以处理任意深度的文件夹结构。

输出日志

|-service-.DS_Store_0M_F
|-service-apollo-adminservice-1.8.2-github.zip_57M_F
|-apollo-adminservice-1.8.2-github_D
  |-apollo-adminservice-1.8.2-github-.DS_Store_0M_F
  |-config_D
    |-config-app.properties_0M_F
    |-config-application-github.properties_0M_F
  |-scripts_D
    |-scripts-startup.sh_0M_F
    |-scripts-shutdown.sh_0M_F
  |-apollo-adminservice-1.8.2-github-apollo-adminservice.conf_0M_F
  |-apollo-adminservice-1.8.2-github-apollo-adminservice-1.8.2.jar_64M_F
  |-apollo-adminservice-1.8.2-github-apollo-adminservice-1.8.2-sources.jar_0M_F
|-apollo_D
  |-apollo-.DS_Store_0M_F
  |-apollo-portal_D
    |-apollo-portal-apollo-portal-1.8.2-sources.jar_1M_F
    |-apollo-portal_D
      |-apollo-portal-apollo-portal.pid_0M_F
    |-apollo-portal-apollo-portal-1.8.2.jar_55M_F
    |-config_D
      |-config-app.properties_0M_F
      |-config-apollo-env.properties_0M_F
      |-config-application-dev.properties_0M_F
      |-config-application-github.properties_0M_F
    |-apollo-portal-apollo-portal.conf_0M_F
    |-apollo-portal-apollo-portal.jar_55M_F
    |-scripts_D
      |-scripts-startup.sh_0M_F
      |-scripts-shutdown.sh_0M_F
  |-apollo-configservice_D
    |-config_D
      |-config-app.properties_0M_F
      |-config-application-github.properties_0M_F
    |-apollo-configservice_D
      |-apollo-configservice-apollo-configservice.pid_0M_F
    |-apollo-configservice-apollo-configservice-1.8.2.jar_68M_F
    |-apollo-configservice-apollo-configservice-1.8.2-sources.jar_0M_F
    |-apollo-configservice-apollo-configservice.jar_68M_F
    |-scripts_D
      |-scripts-startup.sh_0M_F
      |-scripts-shutdown.sh_0M_F
    |-apollo-configservice-apollo-configservice.conf_0M_F
  |-apollo-adminservice_D
    |-config_D
      |-config-app.properties_0M_F
      |-config-application-github.properties_0M_F
    |-apollo-adminservice_D
      |-apollo-adminservice-apollo-adminservice.pid_0M_F
    |-scripts_D
      |-scripts-startup.sh_0M_F
      |-scripts-shutdown.sh_0M_F
    |-apollo-adminservice-apollo-adminservice.conf_0M_F
    |-apollo-adminservice-apollo-adminservice-1.8.2.jar_64M_F
    |-apollo-adminservice-apollo-adminservice.jar_64M_F
    |-apollo-adminservice-apollo-adminservice-1.8.2-sources.jar_0M_F
  |-apollo-union-start.sh_0M_F
  |-apollo-union-shutdown.sh_0M_F
|-service-apollo-portal-1.8.2-github.zip_50M_F
|-service-apollo-configservice-1.8.2-github.zip_61M_F
--------------------------------------------------------
count: 44, size: 610 M

到此这篇关于Java实现递归读取文件夹下的所有文件的文章就介绍到这了,更多相关Java递归读取文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Spring Boot 属性配置和使用

    详解Spring Boot 属性配置和使用

    本篇文章主要介绍了详解Spring Boot 属性配置和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java创建数组的3种方式代码举例

    Java创建数组的3种方式代码举例

    数组是相同类型数据的有序集合,数组描述的是若干个相同类型的数据按照一定的先后次序排列组合而成,其中每一个数据称为数组的元素,可以通过下标进行访问,这篇文章主要给大家介绍了关于Java创建数组的3种方式,需要的朋友可以参考下
    2024-01-01
  • jstack报错Unable to open socket file解决

    jstack报错Unable to open socket file解决

    这篇文章主要为大家介绍了jstack报错Unable to open socket file的解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • Java实现将彩色PDF转为灰度PDF的示例代码

    Java实现将彩色PDF转为灰度PDF的示例代码

    本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下吧
    2022-03-03
  • springboot常用注释的讲解

    springboot常用注释的讲解

    今天小编就为大家分享一篇关于springboot常用注释的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Java 访问剪切板(复制,粘贴)的示例

    Java 访问剪切板(复制,粘贴)的示例

    这篇文章主要介绍了Java 访问剪切板(复制,粘贴)的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-11-11
  • SpringBoot java-jar命令行启动原理解析

    SpringBoot java-jar命令行启动原理解析

    这篇文章主要介绍了SpringBoot java-jar命令行启动原理解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • mybatis原理概述入门教程

    mybatis原理概述入门教程

    这篇文章主要介绍了在今天这篇博文中,我将要介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibernate之间存在着怎么样的关系,大家这些问题一起通过本文学习吧
    2016-09-09
  • Javafx实现国际象棋游戏

    Javafx实现国际象棋游戏

    这篇文章主要为大家详细介绍了Javafx实现国际象棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • SpringBoot如何实现持久化登录状态获取

    SpringBoot如何实现持久化登录状态获取

    这篇文章主要介绍了SpringBoot 如何实现持久化登录状态获取,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论