Java不会使用FileWriter

时间:2017-03-27 21:19:48

标签: java filewriter

我想写一个Java文件(我也用Java创建了) 我需要在其中附加行,并按照在线说明操作我的代码 我永远不会触发错误(我永远不会触及一个catch块),但是我没有在文本文件中收到任何文本。
所有变量都设置正确。

这是我的代码atm:

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());
    }
}

3 个答案:

答案 0 :(得分: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 :(得分:1)

您没有关闭PrintWriter

但这是糟糕的设计。您应该保持文件打开,不要打开并在每次写入时关闭它。

答案 2 :(得分:0)

  

所以不要忘记调用flush()方法并在编写完成后关闭()。

感谢您解决方案jlordo,刷新和关闭解决了它

  

但这是糟糕的设计。您应该保持文件打开,不要打开并在每次写入时关闭它。

感谢您提供信息EJP,我正在刷新文件,我将其保持打开状态,直到程序崩溃或正确关闭