在 Java.io 體系中,File 類佔據特殊地位:它不負責具體的資料流讀寫,而是直接面向磁碟文件與文件系統。通過 File 物件,開發者可獲取權限、時間戳、路徑等元資料,並能瀏覽目錄層級結構,是文件管理操作的入口類。
// 以路徑字串建立
File f1 = new File("/"); // 根目錄
File f2 = new File("/", "auto.bat"); // 父路徑 + 文件名
// 以父 File 物件建立
File f3 = new File(f1, "auto.bat"); // 父 File + 文件名
canRead() / canWrite() / exists():可讀、可寫、是否存在getName() / getParent() / getPath() / getAbsolutePath():名稱、父目錄、相對/絕對路徑isFile() / isDirectory() / isAbsolute():類型判斷length() / lastModified():大小(位元組)與最後修改時間注意:上述方法均為「只讀」,無對應的 setter 改變屬性。
renameTo(File dest):重命名或移動delete():刪除文件或空目錄mkdir():建立單層目錄(父目錄必須存在)mkdirs():遞迴建立多層目錄String[] list() // 所有項目
String[] list(FilenameFilter filter) // 過濾後的項目
FilenameFilter 僅含一個方法:
boolean accept(File dir, String name)
範例:只列出 .html 副檔名的文件
import java.io.*;
public class OnlyExt implements FilenameFilter {
private String ext;
public OnlyExt(String ext) { this.ext = "." + ext; }
@Override
public boolean accept(File dir, String name) {
return name.endsWith(ext);
}
}
class DirListOnly {
public static void main(String[] args) {
File dir = new File("/Java");
FilenameFilter filter = new OnlyExt("html");
String[] files = dir.list(filter);
for (String f : files) System.out.println(f);
}
}
File[] listFiles()
File[] listFiles(FilenameFilter filter)
File[] listFiles(FileFilter filter) // FileFilter 僅有 boolean accept(File pathname)
回傳 File[] 可直接獲取屬性,避免二次構造路徑,效能與便利性均優於 list()。
listFiles() 並搭配 FileFilter 進行型別安全過濾。Files.walkFileTree) 以獲得更豐富的訪問控制與效能。File.separator 或 Paths.get() 避免硬編碼分隔符。