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

Java File 類完全掌握:檔案/目錄操作、路徑處理與遞歸實戰

     編輯:Java 相關知識

File 類定位:路徑代表,非資料流

java.io.File 不讀寫檔案內容,它代表路徑抽象,封裝了檔案/目錄的元數據操作:建立、刪除、重命名、屬性查詢、目錄遍歷。

路徑表示:絕對 vs 相對,跨平台寫法

類型範例說明
絕對路徑D:\\data\\a.txt / /home/user/a.txt從根目錄開始,唯一確定
相對路徑data\\a.txt / ./a.txt相對「當前工作目錄」

Java 代碼中路徑字串寫法


// Windows 建議雙反斜線或正斜線
File f1 = new File("D:\\data\\a.txt");
File f2 = new File("D:/data/a.txt"); // 推薦:跨平台通用

// 相對路徑:Eclipse 專案根目錄 / 控制台 class 檔所在目錄
File f3 = new File("data/a.txt");

// 父子路徑分離建構
File f4 = new File("D:/data", "a.txt"); // 等同 D:/data/a.txt

核心 API 速查表

方法返回值作用注意
createNewFile()boolean建立空檔案父目錄必須存在,檔案已存回 false
mkdir()boolean建立單層目錄父目錄不存在失敗
mkdirs()boolean建立多層目錄自動建立所有父目錄
delete()boolean刪除檔案/空目錄非空目錄失敗
exists()boolean路徑是否存在
isFile()boolean是否為檔案
isDirectory()boolean是否為目錄
getName()String檔案/目錄名不含路徑
getParent()String父目錄路徑無父目錄回 null
getAbsolutePath()String絕對路徑規範化後
length()long檔案大小目錄回 0
list()String[]子項名稱陣列非目錄回 null
listFiles()File[]子項 File 陣列非目錄回 null
renameTo(dest)boolean重命名/移動跨磁碟可能失敗
setReadOnly()boolean設為唯讀不可逆(純 Java)

基本操作範例


File dir = new File("e:/Book");
File file = new File("e:/Book/chapter1.txt");

// 建立檔案
if (!file.exists()) file.createNewFile();

// 列出目錄內容
if (dir.isDirectory()) {
    for (File f : dir.listFiles()) {
        System.out.println(f.getName() + (f.isDirectory() ? "[目錄]" : " [" + f.length() + " bytes]"));
    }
}

// 遞歸刪除目錄樹(慎用!)
public static void deleteAll(File f) {
    if (f.isFile()) { f.delete(); return; }
    for (File child : f.listFiles()) deleteAll(child);
    f.delete(); // 最後刪除空目錄
}

兩大經典遞歸實戰

1. 完整列印目錄樹


public static void printTree(File root, String indent) {
    System.out.println(indent + root.getName() + (root.isDirectory() ? "/" : ""));
    if (root.isDirectory()) {
        for (File child : root.listFiles()) {
            printTree(child, indent + "  ");
        }
    }
}
// 呼叫:printTree(new File("e:/Book"), "");

2. 計算目錄總大小


public static long getSize(File f) {
    if (f.isFile()) return f.length();
    long sum = 0;
    for (File child : f.listFiles()) sum += getSize(child);
    return sum;
}

路徑處理進階:Java 7+ Path/Files 替代方案

File API 設計較老,缺陷:

  • 錯誤處理弱(多回傳 boolean,無細節)
  • 不支援符號連結、權限屬性
  • 效能差(每次呼叫都觸發系統呼叫)

現代替代: java.nio.file.Path + Files 工具類:


Path path = Paths.get("e:/Book/chapter1.txt");
Files.createDirectories(path.getParent()); // 等同 mkdirs
Files.deleteIfExists(path); // 不拋出例外
Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);
Files.walkFileTree(root, new SimpleFileVisitor<>() { ... }); // 高效遍歷

總結

  • File 適合簡單路徑操作、教學、舊專案維護。
  • 新專案優先用 Path/Files:異常豐富、支援屬性/連結、Stream API 整合、效能更好。
  • 核心觀念:File 只管路徑元數據,不管內容;讀寫內容請用 FileInputStream/Files.readAllBytes 等。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved