使用Java基于大小拆分XML

时间:2017-04-20 08:49:25

标签: java xml filesplitting

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

错误:线程“main”中的异常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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

第一次使用output.clear()是正常的,因为您之前添加了一个元素。

output.add(event);

但第二次,output为空。

<强>解决方案

  • 在使用output

  • 之类的output.clear()之前,您需要检查output.isEmpty()是否为空
  • 您可能忘记在清除之前将元素添加到列表中。