我想让你考虑使用printStackTrace(PrintWriter s)方法的一个小问题。我需要在追加模式下使用它。
以下示例解释了我的意思:
try {
} catch (Exception e) {
try {
e.printStackTrace(new PrintWriter(new FileWriter("mylog.txt", true)));
} catch (IOException ioe) {
System.out.println("I can't open the file mylog.txt");
}
}
请注意
new FileWriter(" mylog.txt",true);
是我在附加模式下打开文件(并且第一次创建它,因为它不存在)的方式。
结果是文件中只有最后一个例外,而不是一系列例外。曾经有一次,该方法打开了它没有写任何东西的文件。 我该如何解决这个问题?
谢谢。
答案 0 :(得分:1)
添加krzyk提到的内容
Per OutputStreamWriter.close():关闭流,先将其刷新。关闭流后,进一步的write()或flush()调用将导致抛出IOException。关闭之前关闭的流无效。
如上所述,如果你没有调用close并且这个try {} catch经常被触发,你就不会将内容刷新到文件中。
它应该写成
try {
} catch (Exception e) {
try {
FileWriter fw = new FileWriter("mylog.txt", true)
e.printStackTrace(new PrintWriter(fw));
fw.close();
} catch (IOException ioe) {
System.out.println("I can't open the file mylog.txt");
}
}
更好的方法是
FileWriter fw = new FileWriter("mylog.txt", true);
PrintWriter pw = new PrintWriter(fw);
try {
} catch (Exception e) {
try {
e.printStackTrace(pw);
} catch (IOException ioe) {
System.out.println("I can't open the file mylog.txt");
}
}finally {
pw.close();
fw.close();
}
答案 1 :(得分:0)
您应该关闭创建的var fs = require('fs');
var readline = require('readline');
var cntr = 0;
var rl = readline.createInterface({
input: fs.createReadStream('filepath');
});
rl.on('line', function(line) {
if (cntr++ >= 100) {
// only output lines starting with the 100th line
console.log(`Line read: ${line}`);
}
});
,而不是关闭它可能会导致您描述的问题。
Writer