Shammer's Philosophy

My private adversaria

printStackTrace を自力で書いてみる

printStackTrace は、デフォルトでは標準出力に出す。そして、引数で PrintWriter を渡してやればそこに書き込みしてくれる。しかし、、、文字列でそれを取得したい場合にどうするんだろう、と思ったのでちょっと調べてみた。こんな感じで書けばそれっぽい情報を取得できる。

catch( Exception e ){
    System.out.println(e.getClass());
    StackTraceElement[] array = e.getStackTrace();
    for( int i = 0 ; i < array.length ; i++ ){
	System.out.println("\t" + array[i].toString());
    }
}

まあ、この例では System.out.println を使っているのであまり意味がない。StringBuffer を用意して、そこに StackTraceElement の各要素の toString を append していけば文字列としてどこでも使用できるようにできるだろう。Lisp で言うところの make-string-input-stream とか make-string-output-stream みたいなのって Java でもあるのだろうか。