尝试使用 BufferedWriter.What 写入文件时出现 NPE 我做错了吗?
Getting NPE when trying write to file using BufferedWriter.What am I doing wrong?
我有一个树设置。我正在尝试使用 BufferedWriter 将其保存到 txt 文件中。它创建文件,然后当我的程序第一次调用 BufferedReader 的 write 方法(第 102 行)时遇到空指针异常,所以我猜它没有正确初始化?注意:"node" 只是根的有效负载,我可以使用相同的方法打印树,所以问题不在于节点变量。
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)
你的问题是,你有多个 TreeNode
实例,但只有外面的 writer
已填充。
您可以在堆栈跟踪中看到实际上外部编写器已成功进行到第 106 行,它调用了 no.print()
。这是另一个节点对象。然后在这个对象中,它在第 102 行失败,因为 writer 在那里是空的。
最好从字段中删除 writer
并将其作为参数传递给 print() 并且不要将其他变量存储为字段 (file
+ fw
) 或者)。
我有一个树设置。我正在尝试使用 BufferedWriter 将其保存到 txt 文件中。它创建文件,然后当我的程序第一次调用 BufferedReader 的 write 方法(第 102 行)时遇到空指针异常,所以我猜它没有正确初始化?注意:"node" 只是根的有效负载,我可以使用相同的方法打印树,所以问题不在于节点变量。
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)
你的问题是,你有多个 TreeNode
实例,但只有外面的 writer
已填充。
您可以在堆栈跟踪中看到实际上外部编写器已成功进行到第 106 行,它调用了 no.print()
。这是另一个节点对象。然后在这个对象中,它在第 102 行失败,因为 writer 在那里是空的。
最好从字段中删除 writer
并将其作为参数传递给 print() 并且不要将其他变量存储为字段 (file
+ fw
) 或者)。