使用Java基于大小拆分XML
我尝试使用以下方法拆分XML文件,它创建了第一个拆分文件没有问题,但当我使用output.clear()时;要清除已写入的XMLEvents数组,它将抛出一个错误 错误:线程“main”javax.xml.stream.XMLStreamException中出现异常:未找到要写入的元素:java.lang.ArrayIndexOutOfBoundsException:-1 我试图调查这个问题,但没有成功,任何关于导致错误的原因或如何克服错误的建议都非常感谢使用Java基于大小拆分XML,java,xml,filesplitting,Java,Xml,Filesplitting,我尝试使用以下方法拆分XML文件,它创建了第一个拆分文件没有问题,但当我使用output.clear()时;要清除已写入的XMLEvents数组,它将抛出一个错误 错误:线程“main”javax.xml.stream.XMLStreamException中出现异常:未找到要写入的元素:java.lang.ArrayIndexOutOfBoundsException:-1 我试图调查这个问题,但没有成功,任何关于导致错误的原因或如何克服错误的建议都非常感谢 public void SplitBy
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();
}
}
}
假设
output
是类中定义的List
,我认为您的问题在于使用output.clear()
两次
第一次使用output.clear()
是可以的,因为之前添加了一个元素
output.add(event);
但第二次,输出
为空
解决方案
- 在使用类似于
output.isEmpty()的
之前,需要检查output.clear()
是否为空output
- 您可能忘记在清除列表之前将元素添加到列表中