Java實現(xiàn)遞歸讀取文件夾下的所有文件
代碼
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 { // 文件數(shù)量 private int fileCount; // 文件夾總?cè)萘看笮? 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 注解,說明其中包含了測試代碼。以下是對這段代碼的總結(jié)和解析:
成員變量:
- fileCount:記錄文件數(shù)量。
- totalSize:記錄文件夾總?cè)萘看笮 ?/li>
測試方法:
testMain:這是一個測試方法,用于測試 readAllFile 方法。它首先指定了一個文件夾路徑 /Users/yueyu/Documents/service,然后調(diào)用 readAllFile 方法來讀取該文件夾下的所有文件和子文件夾,并輸出文件數(shù)量和總大小信息。
遞歸方法:
readAllFile:這是一個遞歸方法,用于遞歸地讀取文件夾下的所有文件和子文件夾。它接收一個 File[] 類型的參數(shù) files,表示當(dāng)前文件夾下的所有文件和子文件夾,以及一個整數(shù)參數(shù) indent,表示當(dāng)前文件夾在遞歸樹中的深度。
對于 files 數(shù)組中的每個文件 f,如果是文件夾,則輸出文件夾名稱,并遞歸調(diào)用 readAllFile 方法,傳入該文件夾下的所有文件和子文件夾,并將縮進 indent 加 1。
如果是文件,則累加其大小到 totalSize 中,并輸出文件的名稱和大小信息,同時增加 fileCount。
代碼執(zhí)行:
在測試方法 testMain 中,首先創(chuàng)建一個 File 對象表示指定的文件夾路徑,并獲取該文件夾下的所有文件和子文件夾。
然后調(diào)用 readAllFile 方法來遞歸地讀取文件夾下的所有文件和子文件夾,并輸出文件數(shù)量和總大小信息。
總的來說,這段代碼實現(xiàn)了對指定文件夾的遞歸遍歷,輸出了每個文件和文件夾的名稱以及大小信息。通過遞歸的方式,可以處理任意深度的文件夾結(jié)構(gòu)。
輸出日志
|-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
到此這篇關(guān)于Java實現(xiàn)遞歸讀取文件夾下的所有文件的文章就介紹到這了,更多相關(guān)Java遞歸讀取文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java創(chuàng)建數(shù)組的3種方式代碼舉例
數(shù)組是相同類型數(shù)據(jù)的有序集合,數(shù)組描述的是若干個相同類型的數(shù)據(jù)按照一定的先后次序排列組合而成,其中每一個數(shù)據(jù)稱為數(shù)組的元素,可以通過下標(biāo)進行訪問,這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建數(shù)組的3種方式,需要的朋友可以參考下2024-01-01jstack報錯Unable to open socket file解決
這篇文章主要為大家介紹了jstack報錯Unable to open socket file的解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-02-02Java實現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼
本文以Java代碼為例介紹如何實現(xiàn)將彩色PDF文件轉(zhuǎn)為灰度(黑白)的PDF文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-03-03SpringBoot如何實現(xiàn)持久化登錄狀態(tài)獲取
這篇文章主要介紹了SpringBoot 如何實現(xiàn)持久化登錄狀態(tài)獲取,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11