程式碼片段
prop.load(new BufferedReader(new FileReader(file)));
...
prop.store(new BufferedWriter(new FileWriter(file)), "");
記憶體 vs 資源
| 層面 | 行為 |
| Java 物件 (BufferedReader/Writer) | 方法結束後無引用,GC 會回收記憶體 |
| 底層檔案描述符 | 未調用 close() 前持續佔用,OS 禁止其他進程寫入/刪除該檔案 |
實際影響
- 同一 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,確保檔案描述符及時歸還作業系統。
- 上一篇文章: 網站 Banner 製作實務:美術繪製 vs 素材修改,程式設計師常用後者
- 下一篇文章: jQuery 選取 span 父元素並套用紅色邊框樣式代碼解析
Copyright ©
程式碼之家 All Rights Reserved