Java zipoutputstream如何插入zip 2 XML文件



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

为创建输出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);

coftructmarshaller是我在此类中使用的一种方法。

现在,我想创建2个文件.xml(即newfeed.xml和newfeedagency.xml(,然后将它们放入唯一的文件fcowrnfo.zip(出于安全原因而称呼为fcowrnfo.zip(

>

我尝试写2倍相同的东西,只有1个servlet,但显然在文件中。我只找到我必须写的第二个文件。

在文件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?

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

您可以在创建第一个文件后立即在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();

最新更新