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

Java IO 文件操作實戰總結(二):File 類核心 API 完整示範

     編輯:Java 程式設計入門

File 類核心功能分類

  • 路徑構建與資訊獲取
  • 檔案/目錄建立、刪除、重命名
  • 屬性判斷(存在、可讀寫執行、隱藏、目錄/檔案)
  • 目錄遍歷與遞歸列舉
  • 檔案系統根目錄列舉

實戰範例彙整

1. 建立 File 物件(跨平台路徑)


String path = File.separator + "home" + File.separator + "user" + File.separator + "work" + File.separator;
// 方式一:父目錄 + 子檔名
File f1 = new File(path, "test.txt");
// 方式二:絕對路徑字串
File f2 = new File(path + "demo.txt");
// 方式三:父目錄 File + 子檔名
File dir = new File(path);
File f3 = new File(dir, "hello.txt");

2. 建立與刪除檔案


File f = new File("/home/user/work/demo.txt");
try {
    boolean created = f.createNewFile();  // 已存在回傳 false,不覆蓋
    boolean deleted = f.delete();         // 刪除成功回傳 true
    f.deleteOnExit();                     // JVM 退出時刪除(臨時檔清理利器)
} catch (IOException e) { e.printStackTrace(); }

3. 檔案屬性判斷


File f = new File("/home/user/work/Demo.txt");
System.out.println("可執行:" + f.canExecute());
System.out.println("存在:" + f.exists());
System.out.println("可讀:" + f.canRead());
System.out.println("可寫:" + f.canWrite());
System.out.println("絕對路徑:" + f.isAbsolute());
System.out.println("是檔案:" + f.isFile());
System.out.println("是目錄:" + f.isDirectory());
System.out.println("隱藏:" + f.isHidden());

4. 目錄建立


File f1 = new File(path, "abc");
f1.mkdir();                    // 單層目錄,父目錄必須存在

File f2 = new File(path, "d/e/f/g");
f2.mkdirs();                   // 遞歸建立多層目錄

5. 獲取路徑資訊


File f = new File("/home/user/work/demo.txt");
System.out.println("絕對路徑字串:" + f.getAbsolutePath());
System.out.println("絕對路徑 File:" + f.getAbsoluteFile());
System.out.println("檔名:" + f.getName());
System.out.println("構造路徑:" + f.getPath());
System.out.println("父目錄:" + f.getParent());  // 若構造用相對路徑可能回傳 null

6. 列舉檔案系統根目錄


File[] roots = File.listRoots();  // 靜態方法
for (File root : roots) {
    System.out.println(root);  // Linux: /  Windows: C:\, D:\...
}

7. 列舉目錄內容


File dir = new File("/opt");
// 方式一:回傳檔名字串陣列
String[] names = dir.list();
for (String n : names) System.out.println(n);

// 方式二:回傳 File 陣列(推薦,攜帶路徑資訊)
File[] files = dir.listFiles();
for (File f : files) System.out.println(f.getAbsolutePath());

8. 遞歸列舉所有檔案(深度優先)


public static void printAll(File f) {
    if (f.isDirectory()) {
        File[] children = f.listFiles();
        if (children != null) {  // 防權限不足回傳 null
            for (File child : children) printAll(child);
        }
    } else {
        System.out.println(f.getAbsolutePath());
    }
}

NIO.2 現代化替代

JDK 7+ 強烈建議使用 java.nio.file 套件:

傳統 FileNIO.2 Path / Files優勢
new File(path)Paths.get(path) / Path.of(path) (JDK 11+)不可變、執行緒安全、支援符號連結
f.mkdirs()Files.createDirectories(path)異常細粒度、原子性選項
f.listFiles()Files.list(path) / Files.walk(path)回傳 Stream<Path>,支援函數式過濾、並行
f.delete()Files.deleteIfExists(path)不拋例外、可跟蹤符號連結
f.renameTo()Files.move(src, target, REPLACE_EXISTING, ATOMIC_MOVE)跨檔案系統、原子移動、覆蓋控制
手工遞歸Files.walkFileTree(path, visitor)訪問者模式、可控制遍歷行為、效能更佳

遞歸列舉 NIO.2 寫法


Files.walk(Paths.get("/opt"))
     .filter(Files::isRegularFile)
     .forEach(System.out::println);

總結

java.io.File 是歷史產物,API 設計有缺陷(回傳值不一致、錯誤處理弱、無符號連結支援)。
新專案請直接使用 java.nio.file.Path / Files,享受 Stream 流式處理、完善異常、跨平台一致性與現代化 API。

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