首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java IO 遞歸實戰:查找指定後綴文件並持久化路徑到文本

     編輯:Java 綜合教學

需求:掃描目錄樹,收集所有 `.java` 文件絕對路徑,寫入日誌文件

核心邏輯:遞歸遍歷 + 集合收集 + 緩衝寫入

import java.io.*;
import java.util.*;

public class IOTest {
    public static void main(String[] args) throws Exception {
        File root = new File("E:/");
        List<File> result = new ArrayList<>();
        collectJavaFiles(root, result);
        persistToFile(result, "E:/log.txt");
    }

    // 遞歸收集 .java 文件
    public static void collectJavaFiles(File dir, List<File> collector) {
        File[] files = dir.listFiles();
        if (files == null) return; // 無權限或非目錄
        for (File f : files) {
            if (f.isDirectory()) {
                collectJavaFiles(f, collector); // 遞歸進入子目錄
            } else if (f.getName().endsWith(".java")) {
                collector.add(f); // 滿足條件加入集合
            }
        }
    }

    // 緩衝寫入文件,每行一個絕對路徑
    public static void persistToFile(List<File> files, String outPath) throws IOException {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(outPath))) {
            for (File f : files) {
                bw.write(f.getAbsolutePath());
                bw.newLine();
            }
        }
    }
}

關鍵點解析

  1. 集合作為引用傳遞:`List<File>` 在遞歸層層傳遞,同一實例收集所有結果,避免重複創建。
  2. 空值防護:`dir.listFiles()` 可能返回 `null`(無讀取權限、非目錄),必須判空。
  3. BufferedWriter 效能:緩衝寫入 + `newLine()` 跨平台換行 + try-with-resources 自動關閉。
  4. 絕對路徑:`getAbsolutePath()` 返回規範化完整路徑,便於後續處理。

執行效果

掃描 E 盤約 2.6 萬行代碼,耗時僅幾秒。輸出文件每行一個完整路徑,便於後續批量處理(編譯、靜態分析、統計)。

輸出結果截圖

擴展建議

  • 使用 `Files.walkFileTree` (NIO.2) 替代遞歸,支援並行、訪問屬性過濾、符號鏈接處理。
  • 加入文件大小、修改時間過濾條件。
  • 輸出格式化為 CSV/JSON,便於導入數據庫或 ELK 分析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved