8

我有一种情况,我正在尝试使用 Java 7 的“尝试使用资源”功能来实现。

我的 finally 块包含一个对象BufferedWriterand File,我想使用“尝试使用资源”功能来关闭它,而不是通过显式调用 close 方法来关闭它。

但是我在网上查了一下,发现这个File类没有实现AutoCloseable接口,但是实现了BufferedWriter。那么我该如何管理这个场景来实现“使用资源尝试”功能呢?

4

3 回答 3

5
 try (BufferedWriter br = new BufferedWriter(new FileWriter(path))) 

简单使用这个,br 会自动关闭。例如。http://www.roseindia.net/java/beginners/java-write-to-file.shtml

于 2013-05-02T11:56:27.963 回答
4

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.

于 2013-05-02T11:51:12.880 回答
0

您不能仅使用 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。

于 2013-05-02T11:57:33.947 回答