我正在寻找一个存储在zip文件中的XML文件。我有很多问题需要了解如何做到这一点。我似乎能做的最好的事情就是让输入流工作,但我无法理解如何阅读它! 所以我知道它是正确的文件,我不想将数据传递给我拥有的XML解析器。但是我真的不明白输入流是什么,或者如何正确地操作它。 我已经看过它之前使用过缓冲区然后读入缓冲区,我的问题是如果它是一个足够大的文件,我们如何正确选择缓冲区的大小?
任何帮助都会很棒,谢谢!
ZipFile zf;
try {
zf = new ZipFile(directory);
CharBuffer charBuffer = CharBuffer.allocate(BUFFER_SIZE);
for (Enumeration<? extends ZipEntry> e = zf.entries();
e.hasMoreElements();) {
ZipEntry ze = e.nextElement();
String name = ze.getName();
if (name.endsWith(".xml")) {
InputStream in = zf.getInputStream(ze);
// read from 'in
}
}
} catch (IOException e1) {
System.out.println("Sorry we couldn't find the file");
e1.printStackTrace();
}
答案 0 :(得分:2)
你的意思是在这?
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(in);
或者你是说你已经拥有一个不采用InputStream的特定XML解析器 - 它需要什么?
答案 1 :(得分:1)
您可以使用SAX
或StAX
来解析/阅读信息流 - 参考JAXP
使用Stream API,
XMLStreamReader reader=XMLInputFactory.newFactory().createXMLStreamReader(in);
while(reader.hasNext())
{
System.out.println(reader.next());
System.out.println(reader.getLocalName());
}
使用SAX,
SAXParserFactory.newInstance().newSAXParser().parse(in, new YourHandler());
答案 2 :(得分:0)
简单的谷歌搜索可以引导您阅读大量文章,解释解析XML所涉及的代码工作。为什么不直接搜索?
其中一个:http://www.java-samples.com/showtutorial.php?tutorialid=152
我不包括如何解压缩文件,因为你已经提到你已经完成了,但如果你正在寻找选项,我会编辑我的答案。
快乐的Java编码。 :)