2012-12-18 58 views
2

我正在寫使用java.io.BufferedWriter中 我想的第一件事就是一些代碼括號是:爲什麼需要try/catch塊的BufferedWriter

String filename = new String("test.txt"); 
    Charset charset = new Charset("US-ASCII"); 
    try { 
     BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset); 
     bw.write("hello"); 
    } catch (IOException e) { 
     System.out.println(e); 
    } 

其輸出一個空的test.txt 看到一個例如,採用以下格式,我嘗試過:

String filename = new String("test.txt"); 
    Charset charset = new Charset("US-ASCII"); 
    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset)){ 
     bw.write("hello"); 
    } catch (IOException e) { 
     System.out.println(e); 
    } 

其中第一行輸出一個文本文件「hello」。 這種形式的含義是什麼,爲什麼它在我的第一次嘗試不起作用?

+0

我從來沒有見過用這種形式關閉之前。 –

+1

第二種形式是嘗試使用資源,並且只適用於Java 7的情況。但是,您的第一個表單也應該正常工作。你當然錯過了別的東西。您需要「刷新」輸出,或關閉「bw」。 –

回答

1

第一選項在語法上是正確的。

我想你好想

bw.close(); 

你做書面方式後。

關閉流,首先沖洗它。

+0

你是對的。在第一個代碼塊中使用bw.close()會導致包含「hello」的test.txt。 第二個代碼塊得到相同效果是否有沒有必要的原因?在這種情況下,close()是否隱含? – jameh

+1

Java7的try-with-resources語法對你很貼切。 –