我有一个场景,我试图实现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
,因为它是一个纯Java对象。它基本上只保存文件名,没有其他内容(即它不需要任何操作系统资源来构建)。
你只需要关闭你的BufferedWriter
,这是正确的AutocCloseable
。
你不能只使用File来创建BufferedWriter, BufferedWriter需要一个Writer,它应该是这样的
try (BufferedWriter w = new BufferedWriter(new FileWriter(new File("file")))) {
...
}
try-with-resources将只在BufferedWriter上调用close。不幸的是,BufferedWriter API确实说它关闭底层的写入器,但实际上它确实关闭了。至于File,它与try-with-resources无关,因为它不是自动关闭的。