我有一个场景,我试图用Java 7'试用资源'功能来实现。'试用资源'功能文件类
我的finally块包含BufferedWriter
和File
的对象,我想使用'try with resource'特性关闭它,而不是通过显式调用close方法来关闭它。
但我检查了网络,看到File
类没有实现AutoCloseable
接口,但BufferedWriter
呢。那么如何管理这个场景来实现'试用资源'功能呢?
我有一个场景,我试图用Java 7'试用资源'功能来实现。'试用资源'功能文件类
我的finally块包含BufferedWriter
和File
的对象,我想使用'try with resource'特性关闭它,而不是通过显式调用close方法来关闭它。
但我检查了网络,看到File
类没有实现AutoCloseable
接口,但BufferedWriter
呢。那么如何管理这个场景来实现'试用资源'功能呢?
try (BufferedWriter br = new BufferedWriter(new FileWriter(path)))
简单地使用它,br会自动关闭。例如, http://www.roseindia.net/java/beginners/java-write-to-file.shtml
因此,在这里您是说,而不是创建一个File对象,我应该直接将文件的路径传递给FileReader构造函数,并绕过创建文件object.Right? – milind 2013-05-02 11:59:30
是的,FileWriter提供了一个像public FileWriter(String fileName)的构造函数,抛出IOException异常 构造一个给定文件名的FileWriter对象。 – 2013-05-02 12:02:32
请参阅本示例代码:http://www.roseindia.net/java/beginners/java-write-to-file.shtml – 2013-05-02 12:05:09
您不需要关闭File
,因为它是纯Java对象。它基本上只是保存文件的名称,没有其他(即不需要任何操作系统资源来构造)。
你只需要关闭你的BufferedWriter
,这是正确的AutocCloseable
。
我正要问,如果一个File对象会留下一个打开的文件句柄:) – 2014-11-28 14:57:32
不能创建一个文件只的BufferedWriter,但是BufferedWriter需要一个作家,这究竟是怎么看起来应该像
try (BufferedWriter w = new BufferedWriter(new FileWriter(new File("file")))) {
...
}
试穿与资源调用close只的BufferedWriter。不幸的是BufferedWriter API确实说它关闭了底层的编写器,但事实上它确实如此。至于文件,它与试用资源无关,因为它不是Autocloseable。
File类没有open()方法或close()方法,所以为什么它应该是自动关闭是一个谜。它是需要关闭的BufferedInputStream。不是一个真正的问题。 – EJP 2013-05-02 12:44:57