2017-05-02 5 views
0

既存のコードに何かを追加しようとしていますので、プロジェクトの構造を引き続き使用します。 costructMarshallerが、私はこのクラスで持っている方法であるjava zipoutputstream zip 2 xmlファイルに挿入する方法

    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); 

:コードをファイル出力zipファイルを作成するには

には、以下の流れを持っています。

今、私は私がtryied

(名前は、セキュリティ上の理由から、このようなものです)2つのファイルの.xml(すなわちnewFeed.xmlとnew​​FeedAgency.xml)を作成し、一意のファイルfcowrnfo.zipに入れたいです同じことを2回書くだけですが、サーブレットは1つだけですが、明らかにファイル.zipに書き込む必要があるのは2番目のファイルだけです。ファイル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 filewritersをした場合、どのように私はzipStreamにそれらを添付することができますか?

また、この問題を解決するにはどうすればよいですか?

+0

サーブレットの呼び出し時に2つのエントリを持つzipファイルを作成しますか?最初の 'bakecaStream.closeEntry();を閉じた直後に2番目のエントリを作成しない理由 – tima

+0

はい、これがコンセプトです。私は誰かが "baseURL"というURLを数字で区切って/ servletが2つのファイル.xmlを含むzipファイルのダウンロードを開始したいとき – user2216131

答えて

0

最初のファイルを作成した直後に、zipファイルに2番目のファイルを作成することができます。

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(); 
関連する問題