首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 匿名 BufferedReader/Writer 未顯式關閉:記憶體會回收,但檔案控制權釋放需 close

     編輯:程式設計綜合問答

程式碼片段

prop.load(new BufferedReader(new FileReader(file)));
...
prop.store(new BufferedWriter(new FileWriter(file)), "");

記憶體 vs 資源

實際影響

  • 同一 JVM 內再次開啟該檔案可能失敗或讀到舊資料。
  • 外部程式(記事本、其他 Java 進程)無法開啟/儲存該檔案。
  • 大量未關閉流導致「Too many open files」錯誤。

最佳實踐:try-with-resources (Java 7+)

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    prop.load(br);
} // 自動 br.close()

try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
    prop.store(bw, "");
} // 自動 bw.close()

舊版本 (Java 6-) 寫法

BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader(file));
    prop.load(br);
} finally {
    if (br != null) try { br.close(); } catch (IOException ignored) {}
}

總結

「物件會被 GC 回收」≠「檔案資源自動釋放」。務必顯式關閉流或使用 try-with-resources,確保檔案描述符及時歸還作業系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
層面行為
Java 物件 (BufferedReader/Writer)方法結束後無引用,GC 會回收記憶體
底層檔案描述符未調用 close() 前持續佔用,OS 禁止其他進程寫入/刪除該檔案