使用e.printStackTrace(PrintWriter s)对异常信息处理

e.printStackTrace(PrintWriter s)


在捕获异常的时候,大家都可能要用到这样的一条语句:e.printStackTrace();

e是Throwable的实例异常对象,用在catch语句中,相当于一个形参,一旦try捕获到了异常,那么就将这个异常信息交给e,由e处理,printStackTrace()是异常类的一个方法。与它重载的方法还有printStackTrace(PrintStream s) 和printStackTrace(PrintWriter s)。

在Throwable类中printStackTrace()内部是这样执行的:

public void printStackTrace() {
        printStackTrace(System.err);

}

它调用了printStackTrace(PrintStream s)方法。err是System类当中的一个静态PrintStream类型字段。所以它能传递进去。

至于另外两个我不在这里说。

  1. package com.excep;  
  2. import java.io.File;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.PrintWriter;  
  5. // Put printStackTrace() into a String  
  6. public class TestException {  
  7.     public static void main(String... args) throws FileNotFoundException {  
  8.         try {  
  9.             throw new Exception("for no season");  
  10.         } catch (Exception e) {  
  11.             PrintWriter pw = new PrintWriter(new File("G:/excep.txt"));  
  12.             e.printStackTrace(pw);  
  13.             pw.flush();  
  14.             pw.close();  
  15.         }  
  16.     }  
  17.     // output:  
  18.     // JAVA.LANG.EXCEPTION: FOR NO SEASON  
  19.     // AT COM.EXCEP.TESTEXCEPTION.MAIN(TESTEXCEPTION.JAVA:9)   

上面这个例子,如果你为了图省事儿,这样写:

e.printStackTrace( new PrintWriter( new File( "G:/excep.txt" )));

那么结果会让你心痛到永远,你在文件中得不到它的异常信息,这是因为PrintWriter提供了一个缓冲区,因为此时可能你写进去的信息没有将缓冲区填满,那么它就不会输出。看来还是得规矩一点,一步一步的来。

 

通过这个程序可以将错误信息打印到G:/excep.txt中, 然后就可以告诉用户错误信息已经被打印在文件当中了,就相当于一个错误日志。

 

下面的这个例子将会把错误信息放入到String 中:

  1. package com.excep;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.PrintWriter;  
  4. import java.io.StringWriter;  
  5. // Put printStackTrace() into a String  
  6. public class TestException {  
  7.     public static void main(String... args) throws FileNotFoundException {  
  8.         try {  
  9.             throw new Exception("for no season");  
  10.         } catch (Exception e) {  
  11.             StringWriter sw = new StringWriter();  
  12.             PrintWriter pw = new PrintWriter(sw);  
  13.             e.printStackTrace(pw);  
  14.             System.out.println(sw.toString().toUpperCase());  
  15.         }  
  16.     }  
  17.     // output:  
  18.     // JAVA.LANG.EXCEPTION: FOR NO SEASON  
  19.     // AT COM.EXCEP.TESTEXCEPTION.MAIN(TESTEXCEPTION.JAVA:9)  
  20. }  
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭