我有一個場景,我試圖用Java 7'試用資源'功能來實現。'試用資源'功能文件類
我的finally塊包含BufferedWriter
和File
的對象,我想使用'try with resource'特性關閉它,而不是通過顯式調用close方法來關閉它。
但我檢查了網絡,看到File
類沒有實現AutoCloseable
接口,但BufferedWriter
呢。那麼如何管理這個場景來實現'試用資源'功能呢?
我有一個場景,我試圖用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對象,我應該直接將文件的路徑傳遞給FileReader構造函數,並繞過創建文件object.Right? – milind 2013-05-02 11:59:30
是的,FileWriter提供了一個像public FileWriter(String fileName)的構造函數,拋出IOException異常 構造一個給定文件名的FileWriter對象。 – 2013-05-02 12:02:32
請參閱本示例代碼:http://www.roseindia.net/java/beginners/java-write-to-file.shtml – 2013-05-02 12:05:09
您不需要關閉File
,因爲它是純Java對象。它基本上只是保存文件的名稱,沒有其他(即不需要任何操作系統資源來構造)。
你只需要關閉你的BufferedWriter
,這是正確的AutocCloseable
。
我正要問,如果一個File對象會留下一個打開的文件句柄:) – 2014-11-28 14:57:32
不能創建一個文件只的BufferedWriter,但是BufferedWriter需要一個作家,這究竟是怎麼看起來應該像
try (BufferedWriter w = new BufferedWriter(new FileWriter(new File("file")))) {
...
}
試穿與資源調用close只的BufferedWriter。不幸的是BufferedWriter API確實說它關閉了底層的編寫器,但事實上它確實如此。至於文件,它與試用資源無關,因爲它不是Autocloseable。
File類沒有open()方法或close()方法,所以爲什麼它應該是自動關閉是一個謎。它是需要關閉的BufferedInputStream。不是一個真正的問題。 – EJP 2013-05-02 12:44:57