在另一个类中使用PrintWriter时,为什么会出现PrintWriter空指针异常

时间:2014-08-24 10:50:33

标签: java printwriter

我一直在使用Java一段时间来完成任务和支持工具,但是我从未想过如何在一个类中使用PrintWriter,然后我可以从另一个类中使用它,例如,我有几个XML我要解析的文件,然后从单个输入源(.xls报告)输出到表,我有几个输出文件用于不同的XML和子节点。所以我创建了这个类来创建PrintWriter并报告输出文件是否已存在:

public class PrintAdmin 
{
    public PrintWriter pout;
    public int PrintFromElement = 0;

    public PrintAdmin(String Dirname) throws IOException
    {
        PrintWriter pout = new PrintWriter(new BufferedWriter(new FileWriter((Dirname))));
        int PrintFromElement = 0;
        File f1 = new File("FirstNode.CSV");
        if(f1.exists()) 
        { PrintFromElement = 1; }
        else
        { PrintFromElement = 0; }
    }
    public void poutclose()
    {
        this.pout.close();
    }

}

这来自:

public class AuditParser 
{
    public static File Auditor;

    public static void main(String[] args) throws IOException 
    { PrintAdmin xmltype1out = new PrintAdmin(xmltype1);
      ...
      for (int xml1 = PrintAdmin.PrintFromElement: xml1 < xml1parsed.header.size();xml1++)
      {
          ...dostuff...
      }

这种模式重复4或5次。

我的问题是,虽然我在PrintAdmin中使用AuditParser进行了良好的编译,但在运行时我得到NullPointerException

我想通过这种方式来创建一个简单的类,它创建一个PrintWriter,指示是否打印标题记录,具体取决于文件是否已经退出。它在这里很有用,我相信它对我来说很有用......

2 个答案:

答案 0 :(得分:2)

您在构造函数中定义了一个局部变量,该局部变量隐藏了从未分配的字段。删除构造函数中的PrintWriter标记。

答案 1 :(得分:0)

问题出在这个

public PrintWriter pout;

声明了一个实例变量,但它从未被初始化,但问题是为什么因为 在你的构造函数中你做了类似这样的事情

public PrintAdmin(String Dirname) throws IOException{
   PrintWriter pout = new PrintWriter(...);
}

正在创建一个新的局部变量pout并且它被初始化但是上面定义的字段从未被初始化。你可以通过这样做来解决这个问题

public PrintAdmin(String Dirname) throws IOException{
       pout = new PrintWriter(...);
    }

你也不需要在构造函数中再次使用PrintFromElement,你已经将它定义为字段