ExceptionのStacktTraceの文字列を取得したいとき〜

[prev : Javaのネットワーク関連のお話] [up : 技術日記]

普段あまり使わないのって結構忘れがちになりますよね。
StackTraceの文字列を取得するのもそんな感じですな。

ExceptionのStacktTraceの文字列を取得したいとき〜

ExceptionのStackTraceは以下の方法で取得することが出来ます。
1.StringWriterオブジェクトを作成する。
2.1で作成したStringWriterオブジェクトを利用してPrintWriterを作成する。
3.2で作成したPrintWriterオブジェクトを引数として、ExceptionのprintStackTrace(java.io.PrintWriter)を呼び出す。
4.最後にStringWriterのtoString()メソッドをよぶとStackTraceの文字列が取得できます。
以下、サンプルソース。
import java.io.*;

/**
 * StackTraceTest.java
 *
 *
 * Created: Fri Jan 17 13:30:33 2003
 *
 * @author nikunoki
 * @version
 */

public class StackTraceTest {
    public StackTraceTest() {}
    
    public static void main(String[] args) {

        try { 
            throw new Exception("test exception");
        } catch (Exception ex) {
            StringWriter sw = null;
            PrintWriter  pw = null;
            
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            ex.printStackTrace(pw);
            String trace = sw.toString();

            System.out.println("ここから");
            System.out.println(trace);
            System.out.println("ここまで");
            
            try { 
                if ( sw != null ) {
                    sw.flush();
                    sw.close();
                } 
                if ( pw != null ) {
                    pw.flush();
                    pw.close();
                }
            } catch (IOException ignore){}
            
        }
    }
} // StackTraceTest
	    

実行結果
nikunoki@NIKUNOKI-NOTE ~/test
bash(58)$ java StackTraceTest
ここから
java.lang.Exception: test exception
        at StackTraceTest.main(StackTraceTest.java:19)

ここまで

Last modified: Mon Jan 20 15:27:04 LMT 2003