java.io.File 是文件系統路徑的抽象表示,僅操作元數據(屬性、創建、刪除),不處理文件內容。本文系統整構造方法、核心 API、實戰代碼模板。
new File(String path) // 路徑字串
new File(File parent, String child) // 父目錄 + 子路徑
new File(URI uri) // URI
| 分類 | 方法 | 說明 |
|---|---|---|
| 文件/目錄共用 | exists() | 是否存在 |
| getCanonicalPath() | 標準絕對路徑(解析 . .. 符號鏈接) | |
| separator / separatorChar | 系統路徑分隔符(跨平台) | |
| getName() | 文件/目錄名 | |
| length() | 文件長度(目錄返回 0) | |
| lastModified() | 最後修改時間戳 | |
| 文件操作 | createNewFile() | 創建文件(不存在時) |
| delete() | 刪除文件/空目錄 | |
| isFile() | 是否文件 | |
| isDirectory() | 是否目錄 | |
| 目錄操作 | mkdir() | 創建單級目錄 |
| mkdirs() | 創建多級目錄(含父目錄) | |
| list() | 返回子項名稱字串數組 | |
| listFiles() | 返回子項 File 數組 | |
| listFiles(FileFilter) | 帶過濾器的 listFiles | |
| isDirectory() | 判斷是否目錄 |
File dir = new File("."); // 當前目錄
File sub = new File(dir, "sub"); // 子目錄
if (!sub.exists()) sub.mkdirs(); // 多級創建
File f = new File(sub, "a.txt");
if (!f.exists()) f.createNewFile();
System.out.println(f.getCanonicalPath()); // 標準路徑
System.out.println(new Date(f.lastModified())); // 修改時間
public static void listAll(File dir) {
File[] files = dir.listFiles();
if (files != null) for (File f : files) {
System.out.println(f.getName());
if (f.isDirectory()) listAll(f);
}
}
FileFilter javaFilter = f -> f.getName().matches(".*[.]java");
File[] javaFiles = new File("src/day07").listFiles(javaFilter);
for (File f : javaFiles) System.out.println(f.getName());
public static void deleteDir(File dir) throws IOException {
if (!dir.exists()) throw new RuntimeException("不存在: " + dir);
if (!dir.isDirectory()) throw new RuntimeException("非目錄: " + dir);
File[] subs = dir.listFiles();
if (subs != null) for (File f : subs) {
if (f.isDirectory()) deleteDir(f);
else if (!f.delete()) throw new IOException("刪除文件失敗: " + f);
}
if (!dir.delete()) throw new IOException("刪除目錄失敗: " + dir);
}
File.separator 或 new File(parent, child),避免硬編碼 / 或 \\。java.nio.file.Files/Path API,功能更豐富、異常信息更清晰、支援符號鏈接、屬性讀取等。