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

Java IO 基石:File 類核心 API 深度解析與讀寫實戰大全

     編輯:Java 綜合教學

Java IO 基石:File 類核心 API 深度解析與讀寫實戰大全

java.io.File 類雖不直接處理數據流,但它是文件系統抽象的入口,負責路徑表示、元數據查詢、目錄遍歷、創建/刪除/重命名等元操作。掌握 File API 是進行高效 IO 開發的前提。

1. 路徑表示與構造

// 絕對路徑
File f1 = new File("D:\\test\\1.txt");
// 相對路徑(相對 user.dir)
File f2 = new File("1.txt");
// 父路徑+子路徑組合
File f3 = new File("D:\\test", "1.txt");
// 目錄
File dir = new File("E:\\abc");

跨平台路徑分隔符:代碼中請使用 File.separator 或正斜槓 /(Java 自動轉換),避免硬編碼反斜槓 \\。

2. 高頻實例方法速查表

方法返回值用途注意事項
createNewFile()boolean創建文件(不存在時)父目錄必須存在,僅創建文件
mkdir()boolean創建單級目錄父目錄不存在則失敗
mkdirs()boolean創建多級目錄遞歸創建父目錄,推薦使用
delete()boolean刪除文件/空目錄非空目錄需遞歸刪除子項
exists()boolean判斷存在性文件/目錄通用
isFile()boolean是否文件
isDirectory()boolean是否目錄
getAbsolutePath()String獲取絕對路徑規範化路徑
getName()String獲取文件/目錄名不含路徑
getParent()String獲取父目錄路徑可能為 null
length()long文件字節大小目錄返回 0
list()String[]子項名稱數組非目錄返回 null
listFiles()File[]子項 File 對象數組便於遞歸遍歷
renameTo(File dest)boolean重命名/移動跨分區可能失敗,目標存在則失敗
setReadOnly()boolean設置只讀不可逆(需文件系統支持)

3. 文件讀寫實戰範例

讀取文本文件(推薦 BufferedReader + try-with-resources)

public String readFile(String path) throws IOException {
    StringBuilder sb = new StringBuilder();
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line).append(System.lineSeparator());
        }
    }
    return sb.toString();
}

寫入文本文件(BufferedWriter)

public void writeFile(String path, String content) throws IOException {
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
        bw.write(content);
    }
}

二進制文件複製(FileInputStream + FileOutputStream + 緩衝區)

public void copyBinaryFile(String src, String dest) throws IOException {
    try (FileInputStream in = new FileInputStream(src);
         FileOutputStream out = new FileOutputStream(dest)) {
        byte[] buffer = new byte[8192]; // 8KB 緩衝區
        int len;
        while ((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
    }
}

4. 綜合案例:遞歸遍歷與刪除目錄樹

// 打印目錄樹
public void printTree(File dir, int depth) {
    System.out.println("  ".repeat(depth) + dir.getName());
    if (dir.isDirectory()) {
        File[] children = dir.listFiles();
        if (children != null) {
            for (File child : children) {
                printTree(child, depth + 1);
            }
        }
    }
}

// 刪除目錄樹(後序遍歷)
public void deleteTree(File file) {
    if (file.isDirectory()) {
        File[] children = file.listFiles();
        if (children != null) {
            for (File child : children) {
                deleteTree(child);
            }
        }
    }
    file.delete(); // 刪除空目錄或文件
}

5. Java 7+ NIO.2 現代替代方案

新項目建議優先使用 java.nio.file.Path、Files、FileSystem API:

  • 支持符號鏈接、文件屬性讀寫、異步 IO、目錄監聽。
  • Files.walkFileTree() 替代手寫遞歸遍歷。
  • Files.copy/move/delete 原子操作、支持 REPLACE_EXISTING、ATOMIC_MOVE 選項。
File 類屬於 Legacy API,維護舊項目時仍需精通;新項目請擁抱 NIO.2,享受更豐富、更安全、更高性能的文件系統操作體驗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved