【问题标题】:java zipoutputstream how to insert into zip 2 xml filesjava zipoutputstream如何插入zip 2 xml文件
【发布时间】:2017-05-02 10:09:34
【问题描述】:

我正在尝试向现有代码添加一些内容,因此我将继续使用该项目的结构。

要创建输出 zip 文件,代码有以下流程:

                    String bakecaPath = configurationManager.getProviderParam(CommonConstants.THIRD_PARTY_PROVIDER_NAME, CommonConstants.BAKECA_FEED_XML_PATH);
        File bakecaOutputFile = new File(bakecaPath);
        bakecaStream = new ZipOutputStream(new FileOutputStream(bakecaOutputFile));
        innerFileName = bakecaOutputFile.getName().replace(".zip", ".xml");
        ze = new ZipEntry(innerFileName);
        bakecaStream.putNextEntry(ze);

            bakecaWriter = xmlOutputFactory.createXMLStreamWriter(bakecaStream, UTF_8);

            Marshaller bakecaMarshaller = constructMarshaller(BakecaAd.class);

               bakecaWriter.writeStartDocument(UTF_8,"1.0");
        bakecaWriter.writeStartElement(getRootElementName(Bakeca.class));


        bakecaWriter.writeEndElement();
        bakecaWriter.writeEndDocument();
        bakecaStream.closeEntry();

        closeWriter(bakecaWriter);

其中 costructMarshaller 是我在此类中的一种方法。

现在,我想创建 2 个文件 .xml(即 newFeed.xml 和 newFeedAgency.xml)并将它们放入一个唯一的文件 fcowrnfo.zip(出于安全原因,名称是这样的)

我尝试用 1 个 servlet 编写 2 次相同的东西,但显然在 .zip 文件中我只找到了我必须编写的第二个文件。

在 web.xml 文件中:

             <servlet>
    <servlet-name>BakecaServlet</servlet-name>
    <servlet-class>it.antlia.wikire.servlet.BakecaServlet</servlet-class>
    <async-supported>true</async-supported>

          <servlet-mapping>
    <servlet-name>BakecaServlet</servlet-name>
    <url-pattern>/bakeca_feed.zip</url-pattern>

如果我制作 2 个文件写入器,如何将它们附加到 zipStream?

或者更好,我该如何解决这个问题?

【问题讨论】:

  • 澄清一下,您想在调用 servlet 时创建一个包含两个条目的 zip 文件?为什么不在关闭第一个 bakecaStream.closeEntry(); 后立即创建第二个条目
  • 是的,这就是概念。我希望当有人对 url “baseURL”/servlet 进行数字化时开始下载包含 2 个文件 .xml 的 zip 文件

标签: java xml stream


【解决方案1】:

您可以在创建第一个文件后立即在 zip 中创建第二个文件。

String bakecaPath = configurationManager.getProviderParam(CommonConstants.THIRD_PARTY_PROVIDER_NAME, CommonConstants.BAKECA_FEED_XML_PATH);

File bakecaOutputFile = new File(bakecaPath);
bakecaStream = new ZipOutputStream(new FileOutputStream(bakecaOutputFile));

innerFileName = bakecaOutputFile.getName().replace(".zip", ".xml");
ze = new ZipEntry(innerFileName);

bakecaStream.putNextEntry(ze);

bakecaWriter = xmlOutputFactory.createXMLStreamWriter(bakecaStream, UTF_8);
Marshaller bakecaMarshaller = constructMarshaller(BakecaAd.class);
bakecaWriter.writeStartDocument(UTF_8,"1.0");
bakecaWriter.writeStartElement(getRootElementName(Bakeca.class));
bakecaWriter.writeEndElement();
bakecaWriter.writeEndDocument();

bakecaStream.closeEntry();
closeWriter(bakecaWriter);

// create the next file
ZipEntry anotherFile = new ZipEntry("filename");

bakecaStream.putNextEntry(anotherFile);

// write to the second file here; you can write to bakecaStream again

bakecaStream.closeEntry();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多