递归读取文件夹下的所有文件

水一篇文章 🐶

代码

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;@Testpublic 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米空气净化器2s使用体验

这个产品最早上市是2017年,我买回来实际上只用了1年就弃用了,性能不行,使用体验也不好。 打算买新的空气净化器,抽空吐槽一下。 这个净化器发售价是899,在当时来说算中下水平的,小米的,有米家…

什么是跨端,常用的跨端技术

跨平台是跨操作系统,跨端是指客户端 常见的客户端有,web、android、ios 等,客户端的特点是有界面、由逻辑,所以包含逻辑跨端和渲染跨端。 常用的跨端技术方案 React Native: 由 Facebook 推出的开源框架,…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程》添加链接描述 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法,详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文,读者将能够了解LiteFlow的特…

数据分析师SQL面试准备(part1)

1. SQL 万能框架 2. SQL的书写顺序,跟程序真的执行顺序不同 3. 4. 5. 6. 7. case when utilization 8. 9. 10. 11.

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。 本章节将从如下场…

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型 目录 多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基…

01.Redis中间件实战1

Redis中间件实战1 Redis各种数据结构实战 字符串 需求:将用户信息存储至缓存中,实现每次前端请求获取用户个人详情时直接从缓存中获取。来演示字符串的写入与读取。 技术方案:为了实现这个需求,首先需要建立用户对象实体,里面包含用户个人的各种信息,包括ID、年龄、姓…

Windows 命令提示符(CMD)操作(三):用户管理

三、用户管理 3.1 net user 管理用户帐户,如创建、删除用户 一般语法: net user [username [password | *] [options]] [/domain] [/add] [/delete] [/expires:{date | never}] [/active:{yes | no}]常见选项和参数包括: [username]&…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么?二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化:BBBP数据库的PCA降维后可视化:BBBP数据库的UM…

qt QXlsx操作 excel 单元格

1.单元格设置宽度 m_pxlsx->setColumnWidth(5, 10);//5为列,10为列的宽度,excel表格中默认单元格宽度为9.36英寸 注意:单元格列宽的单位是英寸,默认的单元格列宽为9.36英寸。 注意:单元格列宽单位不是像素。 我之…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中,我们花了专门的篇幅介绍了 dbt 更多实用的命令,那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念,如果你是 dbt 初学者,我相信如下知识点一定会对你有极大的帮助: 了解 dbt_…

Python数据分析:NumPy、Pandas与Matplotlib库

Python 是一种强大的编程语言,特别适合数据分析,主要得益于其丰富的库生态系统。NumPy、Pandas 和 Matplotlib 是 Python 中最常用的数据分析库。以下是对这三个库的简要介绍以及相应的代码示例。 1. NumPy NumPy 是 Python 的一个基本库,用…

前端 node 常见的包管理工具 npm、npx、Yarn、cnpm、pnpm 的区别有哪些

些工具都是用于管理 Node.js 包和依赖项的 npm (Node Package Manager): npm 是 Node.js 的默认包管理工具,随同 Node.js 安装。主要功能包括安装、发布、管理 JavaScript 包和依赖项。npm 是最常用的包管理工具之一,拥有庞大的包仓库(npm Re…

java基础训练题(2)

一、题目 1. 以下程序输出(D) public static void main(String[] args) {int num 2;switch (num) {case 1:num;case 2:num;case 3:num;default:num;break;}System.out.println(num);} } A:2 B:3 C:4 D&#xff…

STM32 TIM输入捕获测频率占空比库函数

目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler T…

怎样打开“好运“的开关?

说到运气,正好这个春节,我刚刚看了一本书,咱们得到《人生算法》课的主理人,喻颖正老师今年2月刚刚出的一本新书,叫《好运》。 关于运气的抽象原理,你可能听过不少,咱们就不多说了。我主要想借着…

Kubernetes基础(二十二)-K8S的PV/PVC/StorageClass详解

1 概述 先来个一句话总结:PV、PVC是K8S用来做存储管理的资源对象,它们让存储资源的使用变得可控,从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组件。所有Pod使用存储只有一个原则:先规…

WPF大杂烩

1、 <ResourceDictionary Source"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" /> 在上面提供的代码中&#xff0c;Source 属性用于指定要加载的资源字典的位置。这里是一个使用了特殊 URI 格式的路径…