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

Java IO 入門精講:File 類核心功能全解析

     編輯:Java 程式設計入門

前言

在 Java IO 體系中,File 類是文件與目錄路徑的抽象表示,屬於 java.io 包的基石。它不處理具體的數據讀寫,而是專注於文件元數據的操作——創建、刪除、重命名、屬性查詢以及目錄遍歷。掌握 File 類是進階學習各類流操作的前提。

一、路徑分隔符常量:跨平台的關鍵

不同作業系統的路徑分隔符不同:Windows 使用反斜槓 \,Linux/macOS 使用正斜槓 /。為了編寫可移植代碼,File 類提供了兩個靜態常量:

  • File.separator:文件路徑分隔符(如 Windows 下為 \)
  • File.pathSeparator:類路徑分隔符(如 Windows 下為 ;)
public class PathSeparatorDemo {
    public static void main(String[] args) {
        System.out.println("pathSeparator: " + File.pathSeparator); // ;
        System.out.println("separator: " + File.separator);         // \ (Windows)
    }
}

最佳實踐:拼接路徑時務必使用 File.separator,避免硬編碼分隔符導致跨平台失效。

二、構造方法:三種創建方式

構造方法說明
File(String pathname)根據完整路徑字符串創建
File(String parent, String child)父目錄 + 子路徑創建
File(File parent, String child)父目錄 File 對象 + 子路徑創建
// 跨平台寫法示範
String path = "G:" + File.separator + "JavaTest" + File.separator + "test01.txt";
File file = new File(path);

三、核心實例方法詳解

1. 文件/目錄操作

  • boolean createNewFile():創建新文件(不存在時),返回事否成功
  • boolean delete():刪除文件或空目錄
  • boolean mkdir():創建單級目錄
  • boolean mkdirs():創建多級目錄(推薦使用)
  • boolean renameTo(File dest):重命名或移動文件

2. 狀態判斷與屬性獲取

  • boolean exists():路徑是否存在
  • boolean isFile() / isDirectory():判斷類型
  • long length():文件大小(字節),目錄返回 0
  • String getName():僅獲取文件名
  • String getPath():獲取構造時傳入的路徑
  • String getAbsolutePath():獲取絕對路徑
  • String getCanonicalPath():獲取規範路徑(解析 . .. 符號連結)

3. 目錄遍歷

File dir = new File("G:" + File.separator + "JavaTest");

// 僅獲取名稱
String[] names = dir.list();
for (String name : names) {
    System.out.println(name);
}

// 獲取 File 對象數組(推薦,可直接遞歸)
File[] files = dir.listFiles();
if (files != null) {
    for (File f : files) {
        System.out.println(f.getAbsolutePath());
    }
}

注意:list() 與 listFiles() 在目錄不存在或無權限時返回 null,使用前務必判空。

四、遞歸遍歷目錄樹完整示例

public class DirectoryTreePrinter {
    public static void main(String[] args) {
        File root = new File("G:" + File.separator + "JavaTest");
        printTree(root, 0);
    }

    public static void printTree(File file, int level) {
        if (file == null) return;
        
        // 縮進顯示層級
        String indent = "  ".repeat(level);
        System.out.println(indent + (file.isDirectory() ? "[D] " : "[F] ") + file.getName());

        if (file.isDirectory()) {
            File[] children = file.listFiles();
            if (children != null) {
                for (File child : children) {
                    printTree(child, level + 1);
                }
            }
        }
    }
}

五、實戰技巧:安全刪除與創建

File file = new File("G:" + File.separator + "JavaTest" + File.separator + "demo.txt");

if (file.exists()) {
    System.out.println("文件存在,執行刪除:" + file.delete());
} else {
    // 確保父目錄存在
    File parent = file.getParentFile();
    if (parent != null && !parent.exists()) {
        parent.mkdirs();
    }
    try {
        System.out.println("文件不存在,創建新文件:" + file.createNewFile());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

總結

File 類雖不直接處理數據流,但它是文件系統操作的入口。熟練掌握路徑處理、屬性查詢、目錄遍歷與遞歸技巧,能為後續學習 FileInputStream、RandomAccessFile、NIO 等高級 IO 操作打下堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved