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
文件吗?
答案 0 :(得分:2)
您不应该也可能无法将异常写入文件,其编写者可能导致错误。 但您可以尝试使用log4j,如已建议的log4j和catch块。你可以简单地添加一些东西:
private static final Category log = Category.getInstance(MyClass.class.getName());
...
catch (Exception e) {
logger.log(e.getMessage());
}
详细了解如何记录here或this 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