我有一种情况,我正在尝试使用 Java 7 的“尝试使用资源”功能来实现。
我的 finally 块包含一个对象BufferedWriter
and File
,我想使用“尝试使用资源”功能来关闭它,而不是通过显式调用 close 方法来关闭它。
但是我在网上查了一下,发现这个File
类没有实现AutoCloseable
接口,但是实现了BufferedWriter
。那么我该如何管理这个场景来实现“使用资源尝试”功能呢?
try (BufferedWriter br = new BufferedWriter(new FileWriter(path)))
简单使用这个,br 会自动关闭。例如。http://www.roseindia.net/java/beginners/java-write-to-file.shtml
You don't need to close a File
because it's a pure Java object. It basically just holds the name of the file, nothing else (i.e. it does not require any OS resources to construct).
You only need to close your BufferedWriter
and that is correctly 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 无关,因为它不是 Autocloseable。