繁体   English   中英

如何从Java中的Zip文件中的XML中读取

[英]How to read from an XML within a Zip file in Java

我想从存储在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();
    }

你的意思是这样吗?

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(in);

还是您的意思是您已经有一个不使用InputStream的特定XML解析器-它需要什么?

您可以使用SAXStAX来解析/读取流-参考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());

一个简单的google搜索可能会导致您撰写大量文章,以解释解析XML涉及的代码工作。 为什么不只是搜索呢?

其中之一: http : //www.java-samples.com/showtutorial.php?tutorialid=152

我不包括如何解压缩文件,因为您提到您已经完成了,但是如果您正在寻找选项,我将编辑我的答案。

快乐的Java编码。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM