我有树设置。我想使用BufferedWriter将其保存到txt文件中。它创建文件,然后当我的程序第一次调用BufferedReader的write方法(第102行)时它会遇到一个空指针异常,所以我猜它没有正确初始化?注意:“node”只是root的有效负载,我可以使用相同的方法打印树,所以问题不在于节点变量。
public class TreeNode {
File file;
BufferedWriter writer;
FileWriter fw;
public void save() /// save tree into txt file
{
try
{
file = new File("save.txt");
if(!file.exists())
{
file.createNewFile();
}
fw = new FileWriter(file);
writer = new BufferedWriter(fw);
print();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void print() {
try
{
writer.write(node); //line 102
writer.newLine();
if (no != null)
{
no.print();
writer.newLine();
}
if (yes != null)
{
yes.print();
writer.newLine();
}
writer.flush();
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
错误:
Exception in thread "main" java.lang.NullPointerException
at TreeNode.print(TreeNode.java:102)
at TreeNode.print(TreeNode.java:106)
at TreeNode.save(TreeNode.java:90)
at TreeNode.playagain(TreeNode.java:59)
at TreeNode.go(TreeNode.java:189)
at CelebrityGame.main(CelebrityGame.java:22)
答案 0 :(得分:1)
您的问题是,您有多个TreeNode
个实例,但只有外部实例填充了writer
。
您可以在堆栈跟踪中看到外部编写器实际上已成功进入第106行,其中调用no.print()
。这是另一个节点对象。然后在这个对象中,它在第102行失败了,因为编写器是空的。
最好从字段中删除writer
并将其作为参数传递给print(),不要将其他变量存储为字段(file
+ {{1或者)。