例外 - printStackTrace(Printwriter s)方法

时间:2016-06-14 17:01:52

标签: java exception printwriter printstacktrace

我想让你考虑使用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);

是我在附加模式下打开文件(并且第一次创建它,因为它不存在)的方式。

结果是文件中只有最后一个例外,而不是一系列例外。曾经有一次,该方法打开了它没有写任何东西的文件。 我该如何解决这个问题?

谢谢。

2 个答案:

答案 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