在 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);
boolean createNewFile():創建新文件(不存在時),返回事否成功boolean delete():刪除文件或空目錄boolean mkdir():創建單級目錄boolean mkdirs():創建多級目錄(推薦使用)boolean renameTo(File dest):重命名或移動文件boolean exists():路徑是否存在boolean isFile() / isDirectory():判斷類型long length():文件大小(字節),目錄返回 0String getName():僅獲取文件名String getPath():獲取構造時傳入的路徑String getAbsolutePath():獲取絕對路徑String getCanonicalPath():獲取規範路徑(解析 . .. 符號連結)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 操作打下堅實基礎。