我一直在使用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
,指示是否打印标题记录,具体取决于文件是否已经退出。它在这里很有用,我相信它对我来说很有用......
答案 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
,你已经将它定义为字段