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递归读取文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!