2013-05-02 54 views
4

我有一个场景,我试图用Java 7'试用资源'功能来实现。'试用资源'功能文件类

我的finally块包含BufferedWriterFile的对象,我想使用'try with resource'特性关闭它,而不是通过显式调用close方法来关闭它。

但我检查了网络,看到File类没有实现AutoCloseable接口,但BufferedWriter呢。那么如何管理这个场景来实现'试用资源'功能呢?

+0

File类没有open()方法或close()方法,所以为什么它应该是自动关闭是一个谜。它是需要关闭的BufferedInputStream。不是一个真正的问题。 – EJP 2013-05-02 12:44:57

回答

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

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

+0

因此,在这里您是说,而不是创建一个File对象,我应该直接将文件的路径传递给FileReader构造函数,并绕过创建文件object.Right? – milind 2013-05-02 11:59:30

+0

是的,FileWriter提供了一个像public FileWriter(String fileName)的构造函数,抛出IOException异常 构造一个给定文件名的FileWriter对象。 – 2013-05-02 12:02:32

+0

请参阅本示例代码:http://www.roseindia.net/java/beginners/java-write-to-file.shtml – 2013-05-02 12:05:09

3

您不需要关闭File,因为它是纯Java对象。它基本上只是保存文件的名称,没有其他(即不需要任何操作系统资源来构造)。

你只需要关闭你的BufferedWriter,这是正确的AutocCloseable

+0

我正要问,如果一个File对象会留下一个打开的文件句柄:) – 2014-11-28 14:57:32

0

不能创建一个文件只的BufferedWriter,但是BufferedWriter需要一个作家,这究竟是怎么看起来应该像

try (BufferedWriter w = new BufferedWriter(new FileWriter(new File("file")))) { 
     ... 
    } 

试穿与资源调用close只的BufferedWriter。不幸的是BufferedWriter API确实说它关闭了底层的编写器,但事实上它确实如此。至于文件,它与试用资源无关,因为它不是Autocloseable。

+0

这将如何帮助。你是说在这里,如果我按照你指定的方式创建File对象,那么当控件移出try块BufferedWriter时,FileWriter和File都会自动关闭? – milind 2013-05-02 12:02:47

+0

感谢大家的帮助。我已经解决了这个问题。 – milind 2013-05-02 12:08:46

+0

@milind:那么请不要忘记提供任何帮助您解决问题的答案,并接受最有帮助的答案。 – 2013-05-02 12:27:25