2015-06-12 101 views
0

我已经做了一个方法来在Android的外部存储器中写入日志。BufferedWriter关闭抛出异常

public int writeLog(String clase, String metodo, Object object){ 
    try{ 
     File folder = new File(Environment.getExternalStorageDirectory(), Constants.ROUTE_FILES_TEXT); 
     if (!folder.exists()) { 
      folder.mkdir(); 
     } 

     FileWriter fw = new FileWriter(folder.toString() + "/log.txt", true); 

     BufferedWriter out = new BufferedWriter(fw); 
     out.write("Hora: " + TimeService.getCurrentTimeStamp(Constants.TIMESTAMP_PATTERN) + "\n"); 
     out.write("Clase: " + clase + "\n"); 
     out.write("Método: " + metodo + "\n"); 
     out.write("Mensaje: " + object + "\n\n\n"); 
     out.flush(); 
     out.close(); 
     fw.flush(); 
     fw.close(); 
    }catch (Exception ex){ 
     Log.d(TAG, ex.toString()); 
     return 3; 
    } 
    return 0; 
} 

一切工作正常,但该方法始终引发异常。唯一的例外是:

06-13 01:00:02.043: D/FileService(14439): java.io.IOException: OutputStreamWriter is closed 

但是,如果我发表意见的BufferedWriter的收盘价,那么该方法效果很好,我没有得到我的代码的任何异常。

public int writeLog(String clase, String metodo, Object object){ 
    try{ 
     File folder = new File(Environment.getExternalStorageDirectory(), Constants.ROUTE_FILES_TEXT); 
     if (!folder.exists()) { 
      folder.mkdir(); 
     } 

     FileWriter fw = new FileWriter(folder.toString() + "/log.txt", true); 

     BufferedWriter out = new BufferedWriter(fw); 
     out.write("Hora: " + TimeService.getCurrentTimeStamp(Constants.TIMESTAMP_PATTERN) + "\n"); 
     out.write("Clase: " + clase + "\n"); 
     out.write("Método: " + metodo + "\n"); 
     out.write("Mensaje: " + object + "\n\n\n"); 
     out.flush(); 
     //out.close(); 
     fw.flush(); 
     fw.close(); 
    }catch (Exception ex){ 
     Log.d(TAG, ex.toString()); 
     return 3; 
    } 
    return 0; 
} 

是吗?为什么?

+0

抛出异常,不返回。评论封闭是什么修复它,而不是齐平。在关闭之前刷新是多余的。 – EJP

回答

2

关闭out原因所有底层流和作家被关闭为好,这样的呼吁:

fw.flush(); 
fw.close(); 

是多余的后out.close()已在该点fw已经关闭,因为调用。

这导致第二个问题,当fw已经关闭时,调用fw.flush() ...在已经关闭的流或编写器上调用“flush()”通常会导致出现类似于您所看到的异常。

我建议您不要手动关闭fw,而是使用out.close()来关闭整个输出链。

+0

我已评论fw.flush()和fw.close(),它可以正常工作!我的方法创建文件并正确写入它!谢谢@Mike拉伦! –