如何将异常写入文本文件

时间:2012-12-14 19:47:48

标签: java

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文件吗?

5 个答案:

答案 0 :(得分:2)

您不应该也可能无法将异常写入文件,其编写者可能导致错误。 但您可以尝试使用log4j,如已建议的log4j和catch块。你可以简单地添加一些东西:

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

详细了解如何记录herethis post。 另请查看log4j docs

答案 1 :(得分: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);
}

答案 2 :(得分:0)

是的,您可以将异常写入文本文件。但是如果异常发生在您创建FileWriter或BufferedWriter的行中,那么您将无法根据这些对象的状态使用此对象。您还需要在try块之外声明这些对象的实例以启用可见性。

答案 3 :(得分:0)

您不能使用out块中的相同try变量来写入out.txt,因为异常可能已在try块中的任何位置抛出。这意味着在catch块中out可能未初始化,或者尝试使用它进行写入将导致您当前捕获的相同异常。

您可以尝试在catch块中再次打开该文件以编写异常,但由于打开和写入同一文件失败,因此不太可能这样做。

答案 4 :(得分: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的评论。此外,不鼓励捕捉'异常'而不是特定类型 - 但如果你真的想抓住所有东西,赶上Throwabble