0

我正在尝试使用以下方法拆分 XML 文件,它创建了第一个拆分文件没有问题,但是当我使用 output.clear(); 清除已经写入的 XMLEvents 数组会引发错误。

错误:线程“主”javax.xml.stream.XMLStreamException 中的异常:找不到要写入的元素:java.lang.ArrayIndexOutOfBoundsException:-1

我试图调查这个问题但没有成功,任何关于导致错误的原因或如何克服它的建议都非常感谢!

public void SplitBySize() throws FileNotFoundException, XMLStreamException, IOException {

    //File Path
    String filePath = "C:\\Users\\thamm\\Desktop\\XMLFile\\Data2.xml";

    //Read XML file.
    Reader fileReader = new FileReader(filePath);

    //Get XMLInputFactory instance.
    XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();

    //Create XMLEventReader object.
    XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(fileReader);

    long charCount = 0;
    int fileNumber = 1;

    while (xmlEventReader.hasNext()) {

        XMLEvent event = xmlEventReader.nextEvent();
        charCount++;
        output.add(event);

        if (charCount == MAX_SIZE) {

            XMLEventWriter xmlEventWriter = factory.createXMLEventWriter(new FileWriter("C:\\Users\\thamm\\Desktop\\SplitFiles\\output_part_" + fileNumber + ".xml"));

            for (XMLEvent i : output) {
                xmlEventWriter.add(i);
            }

            xmlEventWriter.close();
            output.clear();
            charCount = 0;
            fileNumber++;

        }

        if (event.isEndDocument()) {

            XMLEventWriter xmlEventWriter = factory.createXMLEventWriter(new FileWriter("C:\\Users\\thamm\\Desktop\\SplitFiles\\output_part_End.xml"));

            for (XMLEvent i : output) {
                xmlEventWriter.add(i);
            }
            xmlEventWriter.close();
            output.clear();
        }
    }
}
4

1 回答 1

0

假设这outputList在您的班级中定义的,我认为您的问题是您使用output.clear()了两次。

第一次,你使用output.clear()没问题,因为你之前添加了一个元素。

output.add(event);

但第二次,output是空的。

解决方案

  • 在使用类似的东西之前,您需要检查是否output为空output.clear()output.isEmpty()

  • 您可能忘记在清除列表之前将元素添加到列表中。

于 2017-04-20T08:57:15.443 回答