我想用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的问题么?请大家帮忙看一下,提出解决方案。

解决方案 »

  1.   

    dpNodes.item(p).getFirstChild().getNodeValue()这部分代码很有可能会出NullpointerException.
    dpNodes.item(p).getFirstChild()很可能为空。这想不是XML过10m的问题,可能是xml文件本身的问题。10M很小呀。你可catch runtimeException,如果是NullPointException,则想办法将前一个element与后个element以及element本身打应出来看看.
      

  2.   

    我检查了xml文件,没有空行等特别的,前面部分都没有问题。sax没有用过,要找找看了。
    会不会是FileWriter的问题?
      

  3.   

    我觉得是你的xml文件的问题,这个跟sax和dom关系不大,如果是内存溢出,才会是这个问题引起的。
    fielwriter改为bufferFileWriter试一试吧
      

  4.   

    试过了bufferedWriter,问题还是一样。
    大家还有什么建议么?
      

  5.   

    NullPointerException跟fileWriter应该没有关系
    filewriter要报也是报ioException
    估计是你这里有问题
    dpNodes.item(p).getFirstChild().getNodeValue()
    你这样连接取的话,只要当getFirstChild()取出来是null的话,再接着取getNodeValue()要抛异常了,建议楼主先判一下,比如if(getFirstChild().getFirstChild()!=null){
       sDPTXTOutputFile.write(dpNodes.item(p).getFirstChild().getNodeValue()+"\n");
    }
      

  6.   

    我觉得
    wizardblue(不死鱼)
    说的是有道理的
    你可以先试一下
      

  7.   

    你这样连接取的话,只要当getFirstChild()取出来是null的话,再接着取getNodeValue()要抛异常了,建议楼主先判一下....
    果然是这个问题,十分感谢.