• ベストアンサー

エラーのStackTraceをString変数に代入する方法

こんばんは。いつもお世話になっております。 エラー処理として、エラークラス.printStackTrace()とすれば、エラーがコンソールに表示されますが、そのコンソールに表示されるものを、String型変数に代入したいのですが、どうすればよいんでしょうか? ドキュメントを見て、 String str = getStackTrace().toString(); としてみたのですが、うまく取得できません。誰か方法のわかる方は返事をください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

StringWriterは1.4から使えるようになったクラスではありませんよ。 1.1から使えます。(とAPIリファレンスに書いてあります) したがってUKYさんが回答した内容こそが、JDKのバージョンをあまり問わずに 使用できる、万能な方法です。 逆に、kamkamkam3さんが質問された、getStackTrace()を使用する方法は、 JDK1.4から使えるようになった機能です。 getStackTrace()は、StackTraceElementの配列を返します。 ちょうど、printStackTrace()を実行したときの1行分の情報が配列の1要素になっているイメージです。 配列を返すので、それをtoString()しても欲しい情報が得られなかったのだと思います。 こんな感じで取り出した配列から1つずつ望みの情報を取り出してください。 StackTraceElement[] ary = e.getStackTrace(); //eはExceptionクラス for (int i = 0; i < ary.length; i++){   System.out.println(ary[i].getFileName()); } JDK1.4から使えるようになった機能ですが、スタックトレースの各要素について 行番号や、ファイル名、メソッド名などが自由にとりだせるので、 そういった細かい情報が必要であれば、便利だと思います。 (StringWriterを使ってファイル名や行番号の情報を取り出すのは面倒なので) 単にスタックトレース全体のテキストデータを取得したいのであれば、 UKYさんが書いた方法の方が楽です。 StackTraceElementについては、APIリファレンスを参考にしてください。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/StackTraceElement.html
kamkamkam3
質問者

お礼

お礼が遅れてしまい大変申し訳ございません。 StackTraceElementというのは、配列なんですね。大変わかりやすく、とても助かりました。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

「exceptionObjectを使えばよいのですね。」と書かれているので誤解なきよう言っておきますが、exceptionObject はただ単に例外オブジェクトに対する変数をそのような名前にしただけで、ExceptionObject なるクラスが存在するわけではありませんので念のため。 例えば例外を catch (Exception e) ..... のようにキャッチしたときは、 e.printStackTrace(writer2); のように置き換えてください。

kamkamkam3
質問者

お礼

exceptionObjectはてっきり、そういうクラスが存在するのかな、、、と思っておりました。ナイスなフォローをどうもありがとうございます。 Javaはいろいろな方法があるのですね。とても、すごいなぁと思っています。 ここの方たちは、よくいろんなことを知っていますね。私の周りは、Javaの人間がいないため、とても助かります。 お2名の手助けで、問題が解決でき、なおかつ勉強になりました。どうもありがとうございました。またよろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

コンソールに出力される文字列をそのまま取得したいのなら、こんな感じでどうでしょう?(試してません) (import java.io.*;) StringWriter writer = new StringWriter(); PrintWriter writer2 = new PrintWriter(writer); exceptionObject.printStackTrace(writer2); writer2.flush(); String string = writer.toString(); getStackTrace() を使っても出来なくはないと思いますが、もっと面倒になると思います。

kamkamkam3
質問者

お礼

どうも、ご返事ありがとうございます。 StringWriterですか。j2sdk1.4から利用できるようになったクラスですよね。まだ使ったことがないんですが。。。 exceptionObjectを使えばよいのですね。なんとなくわかったような気がします。 会社のプログラムで、月曜日までに調べなくてはいけないのです。 とても助かりました。早速試してみようと思います。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A