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

您不应该也可能无法将异常写入文件,其作者可能导致错误。但是您可以尝试使用记录器,如 log4j,正如已经建议的那样,并且在您的 catch 块中。您可以简单地添加以下内容:

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

在此处或在此帖子中了解有关登录的更多信息。另请查看log4j 文档

于 2012-12-14T20:02:21.323 回答
0

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

于 2012-12-14T19:51:39.720 回答
0

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

您可以尝试在块中再次打开文件catch以写入异常,但由于打开和写入同一个文件刚刚失败,因此这不太可能起作用。

于 2012-12-14T19:52:28.343 回答
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
//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

于 2012-12-14T20:33:28.830 回答