2015-08-27 26 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(); 
}