2013-05-02 74 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