2015-08-27 23 views
0

文件這是我的代碼:如何關閉Java中

FileWriter fw = new FileWriter(log,true); 
BufferedWriter bw = new BufferedWriter(fw); 
StringWriter sw = new StringWriter(); 
PrintWriter pw = new PrintWriter(sw); 

fw.close(); 
bw.close(); 
sw.close(); 
pw.close(); 

我想改變它的東西是這樣的:

BufferedWriter bw = new BufferedWriter(new FileWriter(log,true)); 
PrintWriter pw = new PrintWriter(new StringWriter()); 

bw.close(); 
pw.close(); 

請問這是正確的,否則將丟失的close()電話導致問題?

+1

從'PrintWriter#close'文檔:'關閉流並釋放與其關聯的任何系統資源。關閉以前關閉的流不起作用。' – SomeJavaGuy

回答

1

可以肯定的結束之時不會忘記你可以使用try-with-resource聲明

try (BufferedWriter bw = new BufferedWriter(new FileWriter(log, true)); 
     PrintWriter pw = new PrintWriter(new StringWriter())) { 
    // do your processing here 
} catch (IOException ex) { 
    // do your exception handling 
} 

編譯器將爲您添加close()的相應代碼。

+1

這對於啓動異常情況也更安全,因爲無論是否存在異常,流都將關閉 - 在OP中提出的兩種變體中的任何一種都不是這種情況 – tucuxi

0

當您關閉的BufferedWriter對象,這需要的FileWriter對象在其構造,那麼隱含的FileWriter的對象也被關閉。

因此,要回答你的問題,兩種方式都很好,並同它不作任何問題

Previous Answer

Best practice

0

自Java 7以來,您可以讓java自動關閉您的資源。看看try with resources

try (BufferedReader br = new BufferedReader(new FileReader(path))) { 
    return br.readLine(); 
}