尝试使用 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) 或者)。