我正在尝试使用以下方法拆分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();
}
}
}
答案 0 :(得分:0)
假设output
是您班级中定义的List
,我认为您的问题是您使用output.clear()
两次。
第一次使用output.clear()
是正常的,因为您之前添加了一个元素。
output.add(event);
但第二次,output
为空。
<强>解决方案强>
在使用output
output.clear()
之前,您需要检查output.isEmpty()
是否为空
您可能忘记在清除之前将元素添加到列表中。