我使用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