0
import java.io.*;
class FileWrite 
{
 public static void main(String args[])
  {
  try{
  // Create file 
  FileWriter fstream = new FileWriter("out.txt");
  BufferedWriter out = new BufferedWriter(fstream);
  out.write("Hello Java");
  //Close the output stream
  out.close();
  }catch (Exception e){//Catch exception if any
     // CAN I WRITE THE EXCEPTION TO THE TEXT FILE
   }
  }
}

ファイルにテキストを書き込んでいます。catchブロックでスローされた例外をout.txtファイルに書き込めますか?

4

5 に答える 5

2

ライターがエラーを引き起こした可能性があるファイルに例外を書き込むべきではなく、おそらく書き込むこともできませんでした。ただし、すでに提案されているように、catch ブロックで log4j などのロガーを使用してみることができます。次のように簡単に追加できます。

   private static final Category log = Category.getInstance(MyClass.class.getName());
   ...
   catch (Exception e) {
    logger.log(e.getMessage());
   }

ロギングの詳細については、こちらまたはこの投稿をご覧ください。log4j docsもチェックしてください。

于 2012-12-14T20:02:21.323 に答える
0

はい、例外をテキストファイルに書き込むことができます。ただし、FileWriterまたはBufferedWriterを作成している行で例外が発生した場合、これらのオブジェクトの状態に基づいてこのオブジェクトを使用することはできません。また、可視性を有効にするには、tryブロックの外側でこれらのオブジェクトのインスタンスを宣言する必要があります。

于 2012-12-14T19:51:39.720 に答える
0

次のメソッドをcatchブロックで呼び出し、オブジェクトを渡します。それはあなたの仕事をします:

 public static void writeException(Exception e) {
     try {
        FileWriter fs = new FileWriter("out.txt", true);
        BufferedWriter out = new BufferedWriter(fs);
        PrintWriter pw = new PrintWriter(out, true);
        e.printStackTrace(pw);
     }
     catch (Exception ie) {
        throw new RuntimeException("Could not write Exception to file", ie);
     }
  }

例として。

try{
   new NullPointerException();
}
catch(Exception e){
   writeException(e);
}
于 2012-12-14T19:49:39.433 に答える
0

ブロックの同じout変数を使用しtryて に書き込むことはできません。out.txtこれは、ブロック内のどこでも例外がスローされた可能性があるtryためです。これは、catchブロック内outが初期化されていないか、それを使用して書き込もうとすると、現在キャッチしているのと同じ例外が発生することを意味します。

ブロック内でファイルを再度開いてcatch例外を書き込もうとすることもできますが、同じファイルを開いて書き込みに失敗したため、これが機能する可能性はほとんどありません。

于 2012-12-14T19:52:28.343 に答える
0
//breaking code
} catch (Exception e) {
    File f = new File("/tmp/someFileYouCanActuallyWriteOn.txt");
    if (!f.exists())
         f.createNewFile();
    e.printStackTrace(new PrintStream(f));
}

ただし、 zachary-yatesからのコメントを検討してください。また、特定のタイプではなく「Exception」をキャッチすることはお勧めできませんが、本当にすべてをキャッチしたい場合は、Throwabble をキャッチしてください。

于 2012-12-14T20:33:28.830 に答える