我使用springframework的Web MVC框架和servlet的handleRequestInternal裏面,我創建了一個變量來訪問一個文件中的本地文件系統,即Java文件釋放資源
protected ModelAndView handleRequestInternal(HttpServletRequest request,......
{
......
File file = new File(rssPath);
if(!file.exists()) {
file.createNewFile();
FileWriter outFile = new FileWriter(rssPath);
outFile.write(rssJson);
outFile.flush();
//file = null;
}
}
的問題是,如果我不設置該文件爲空,該文件仍將被使用,我不能寫入它。
我必須等待幾秒鐘,直到GC收集。
看看File API,我沒有看到任何方法,如close()釋放資源。
那麼,如何正確銷燬文件引用(沒有將其設置爲空,我是否缺少某些東西?)?
該死的我錯過了,關閉FileWriter!難以置信的。謝謝。 – portoalet 2010-11-08 14:15:21
在finally塊中關閉一個文件並不是一個好主意:這意味着即使出現錯誤(!)你的文件也會被關閉爲了創建一個可靠的程序,如果沒有異常,你真的只想關閉它。請參閱http://agiletribe.wordpress.com/2013/07/18/surprising-outrageous-file-handling/而不是使用finally塊,最好使用catch塊並刪除可能部分寫入的文件。 – AgilePro 2013-07-18 14:29:14
Streams可能會在finally塊中關閉。但是在這種情況下,如果發生異常,則必須進行某種錯誤處理。在catch-block中,仍然可能存在您在博客文章中提到的刪除文件代碼。但是代碼中仍然存在錯誤,並且該文件可能不會被刪除。如果catch()中的close()是一個例外。 – 2013-07-18 18:14:53