异常 - printStackTrace(Printwriter s) 方法
Exception - printStackTrace(Printwriter s) method
我想让你思考一个使用方法 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);
是我在附加模式下打开文件(并第一次创建它,因为它不存在)的方式。
结果是文件中只有最后一个异常,没有一系列异常。有一次,该方法打开了一个它没有写入任何内容的文件。
我该如何解决这个问题?
谢谢。
您应该关闭创建的 Writer
s,不关闭它可能会导致您描述的问题。
try (PrintWriter writer = new PrintWriter(new FileWriter("mylog.txt", true))) {
e.printStackTrace(writer);
}
添加 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();
}
我想让你思考一个使用方法 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);
是我在附加模式下打开文件(并第一次创建它,因为它不存在)的方式。
结果是文件中只有最后一个异常,没有一系列异常。有一次,该方法打开了一个它没有写入任何内容的文件。 我该如何解决这个问题?
谢谢。
您应该关闭创建的 Writer
s,不关闭它可能会导致您描述的问题。
try (PrintWriter writer = new PrintWriter(new FileWriter("mylog.txt", true))) {
e.printStackTrace(writer);
}
添加 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();
}