我想用DOMParser处理xml文件,然后用FileWriter输出到txt文件中。
当xml文件不大的时候,程序运行没有问题,但当处理大于10M的一个xml文件,报错NullPointException,发现txt文件只生成一部分
程序如下
DOMParser dpParser = new DOMParser();
dpParser.parse(sDPXMLFilePath); Element dpRoot = null;
NodeList dpNodes = null;
FileWriter sDPTXTOutputFile = null;
Document dpDocument = dpParser.getDocument();
dpRoot = dpDocument.getDocumentElement();
//save as txt file
sDPTXTOutputFile = new FileWriter(sDPTXTFilePath);
dpNodes = dpRoot.getElementsByTagName("COLUMN");
for (int p=0; p<dpNodes.getLength(); p++)
{
sDPTXTOutputFile.write(dpNodes.item(p).getFirstChild().getNodeValue()+"\n"); //\n
}
dpNodes = dpRoot.getElementsByTagName("CELL");
for (int q=0; q<dpNodes.getLength(); q++)
{
sDPTXTOutputFile.write(dpNodes.item(q).getFirstChild().getNodeValue()+"\n");
} sDPTXTOutputFile.close();
是fileWriter的问题么?请大家帮忙看一下,提出解决方案。
当xml文件不大的时候,程序运行没有问题,但当处理大于10M的一个xml文件,报错NullPointException,发现txt文件只生成一部分
程序如下
DOMParser dpParser = new DOMParser();
dpParser.parse(sDPXMLFilePath); Element dpRoot = null;
NodeList dpNodes = null;
FileWriter sDPTXTOutputFile = null;
Document dpDocument = dpParser.getDocument();
dpRoot = dpDocument.getDocumentElement();
//save as txt file
sDPTXTOutputFile = new FileWriter(sDPTXTFilePath);
dpNodes = dpRoot.getElementsByTagName("COLUMN");
for (int p=0; p<dpNodes.getLength(); p++)
{
sDPTXTOutputFile.write(dpNodes.item(p).getFirstChild().getNodeValue()+"\n"); //\n
}
dpNodes = dpRoot.getElementsByTagName("CELL");
for (int q=0; q<dpNodes.getLength(); q++)
{
sDPTXTOutputFile.write(dpNodes.item(q).getFirstChild().getNodeValue()+"\n");
} sDPTXTOutputFile.close();
是fileWriter的问题么?请大家帮忙看一下,提出解决方案。
dpNodes.item(p).getFirstChild()很可能为空。这想不是XML过10m的问题,可能是xml文件本身的问题。10M很小呀。你可catch runtimeException,如果是NullPointException,则想办法将前一个element与后个element以及element本身打应出来看看.
会不会是FileWriter的问题?
fielwriter改为bufferFileWriter试一试吧
大家还有什么建议么?
filewriter要报也是报ioException
估计是你这里有问题
dpNodes.item(p).getFirstChild().getNodeValue()
你这样连接取的话,只要当getFirstChild()取出来是null的话,再接着取getNodeValue()要抛异常了,建议楼主先判一下,比如if(getFirstChild().getFirstChild()!=null){
sDPTXTOutputFile.write(dpNodes.item(p).getFirstChild().getNodeValue()+"\n");
}
wizardblue(不死鱼)
说的是有道理的
你可以先试一下
果然是这个问题,十分感谢.