2010-11-08 135 views
2

我使用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()释放资源。

那么,如何正确销毁文件引用(没有将其设置为空,我是否缺少某些东西?)?

回答

5

则无法关闭文件。但是您必须关闭FileInputStream,FIleOutputStream,FileReaderFileWriter。否则,这些流(和文件句柄)将不会被GCed。 (直到持有该流的对象被GCed)

编辑: 在finally块中执行此操作,确保关闭被调用。

+0

该死的我错过了,关闭FileWriter!难以置信的。谢谢。 – portoalet 2010-11-08 14:15:21

+0

在finally块中关闭一个文件并不是一个好主意:这意味着即使出现错误(!)你的文件也会被关闭为了创建一个可靠的程序,如果没有异常,你真的只想关闭它。请参阅http://agiletribe.wordpress.com/2013/07/18/surprising-outrageous-file-handling/而不是使用finally块,最好使用catch块并删除可能部分写入的文件。 – AgilePro 2013-07-18 14:29:14

+0

Streams可能会在finally块中关闭。但是在这种情况下,如果发生异常,则必须进行某种错误处理。在catch-block中,仍然可能存在您在博客文章中提到的删除文件代码。但是代码中仍然存在错误,并且该文件可能不会被删除。如果catch()中的close()是一个例外。 – 2013-07-18 18:14:53

4

如何在FileWriter对象上使用close()方法?

outFile.close();