我想写一个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());
}
}
答案 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,我正在刷新文件,我将其保持打开状态,直到程序崩溃或正确关闭