【发布时间】: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 文件