2017-03-27 13 views
1

Javaでファイルに書きたい(これはJavaでもうまく作成しました)。
私はそれに行を追加する必要があり、私のコードが動作するはずのオンライン指示に従ってください。
私は決してエラーを引き起こすことはありません(キャッチブロックに到達することはありません)。しかし、テキストファイルにはテキストがありません。
すべての変数が正しく設定されています。JavaはFileWriterを使用して既存のファイルに書き込みません

これは私のコードの気圧です:

private void handleException() { 
    String fullPath = logPath + File.separator + logName; 
    File logFile = new File(fullPath); 
    if (!logFile.exists()) { 
     createLogFile(logFile); 
    } 
    String log = createLog(); 
    addLogToFile(fullPath, log); 
    /* 
    if (Bad error of errorlogs > 20 ofazo) { 
     alertAdministrator(); 
    } 
    */ 
} 

private void createLogFile(File logFile) { 
    try { 
     logFile.getParentFile().mkdirs(); //can cause duplicated files in MacOS 
     logFile.createNewFile(); 
    } catch (IOException ex) { 
     Logger.getLogger(ErrorHandeling.class.getName()).log(Level.SEVERE, null, ex); 
     alertAdministrator("Error while writing logs.\nErrormessage: " + ex.toString()); 
    } 
} 

private String createLog() { 
    String log = lineCount + ": " + message + "\n occurred in: file=" + writableStackTrace[0].getFileName() + " class=" + writableStackTrace[0].getClassName() + " method=" + writableStackTrace[0].getMethodName() + " line=" + writableStackTrace[0].getLineNumber() + "\n caused by: " + cause.getMessage(); 
    return log; 
} 

private void addLogToFile(String fullPath, String log) { 
    try { 
     FileWriter fw = new FileWriter(fullPath, true); 
     BufferedWriter bw = new BufferedWriter(fw); 
     PrintWriter out = new PrintWriter(bw); 
     out.println(log); 
    } 
    catch (IOException ex) { 
     alertAdministrator("Error while writing logs.\nErrormessage: " + ex.toString()); 
    } 
} 
+4

は多分ちょうどロギングフレームワークを使用して閉じていますか?私はかなり確信していますlog4j2ファイルに追加する問題はありません... –

+5

ヒント:**常にあなたの 'AutoCloseable'リソース**を閉じます。 –

+0

PrintWriterの初期化を 'PrintWriter out = new PrintWriter(bw、true);に変更してください。 –

答えて

4

は、マニュアルを参照してください。使用しているコンストラクタ:

https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#PrintWriter(java.io.Writer)

ははっきり言う:

がをフラッシュする自動ラインなしで新しいPrintWriter、を作成します。

のでflush()方法と一度行わclose()ライターを呼び出すことを忘れないでください。

https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#flush() https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#close()

1

あなたはPrintWriterを閉じていません。

しかし、これはデザインが貧弱です。ファイルを開いたままで開いたままにしておき、すべての書き込みを閉じる必要があります。

0

したがって、flush()メソッドを呼び出して、一度行ったライターを閉じる()ことを忘れないでください。

は紅潮、ソリューションjlordoをありがとうと閉鎖は

それを解決した。しかし、これは貧弱なデザインです。ファイルを開いたままで開いたままにしておき、すべての書き込みを閉じる必要があります。

は、情報EJPをありがとう、私は、ファイルをフラッシュしていると私は、プログラムがクラッシュするまで開いて、それを維持するか、正しく

関連する問題