StringWriter
と PrintWriter
を組み合わせて使用する方法があります。
例外のスタックトレース全体を文字列に変換することができます。
サンプルコード
StackTraceToStringExample.java
import java.io.PrintWriter;
import java.io.StringWriter;
public class StackTraceToStringExample {
public static void main(String[] args) {
try {
// 例外を発生させる(例として、0で割り算)
int result = 10 / 0;
} catch (Exception e) {
// スタックトレースを文字列として取得
String stackTrace = getStackTraceAsString(e);
System.out.println("スタックトレース:");
System.out.println(stackTrace);
}
}
public static String getStackTraceAsString(Throwable throwable) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
throwable.printStackTrace(pw);
return sw.toString();
}
}
解説
-
StringWriter
は、文字列データを蓄積するための Writer です。 -
PrintWriter
は、StringWriter
に例外のスタックトレースを出力するために使用します。 -
throwable.printStackTrace(pw);
によって、例外のスタックトレースがStringWriter
に書き込まれます。 -
sw.toString();
でスタックトレースの文字列を取得します。
stackTraceには例外の詳細なスタックトレースが文字列として格納され、好きな場所で表示・処理することができます。
Throwable クラスを引数に使う理由
メソッドで Throwable
クラスのインスタンスを引数にする場合、Exception
と Error
の両方に対応できるため、エラーや例外の種類に関わらず一括で処理できる柔軟な方法となります。サンプルコードでは、getStackTraceAsString
メソッドに Throwable
を引数として渡しているため、以下のように例外だけでなくエラーにも対応できます。