2015-06-12 100 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拉倫! –