2010-10-25 16 views
5

से जावा-ज़िप-आर्काइव बनाएं यदि जावा में परिणामस्वरूप संग्रह लिखना नहीं है, तो मुझे जावा में ज़िप-संग्रह बनाना संभव है लेकिन इसे कहीं और भेजना है?मौजूदा आउटपुटस्ट्रीम

विचार यह है कि जब आप HTTP के माध्यम से किसी उपयोगकर्ता को ज़िप-संग्रह भेजना चाहते हैं तो डिस्क पर फ़ाइल बनाने के लिए अपशिष्ट हो सकता है (उदा। डेटाबेस-ब्लॉब या किसी अन्य डेटा-स्टोर से)।

मैं बनाना चाहेंगे एक

java.util.zip.ZipOutputStream 

या एक

apache.commons.ZipArchiveOutputStream 

जहां फीडर एक ByteArrayOutputStream मेरी सबवर्सन भंडार से आ रही

उत्तर

6

हाँ यह बिल्कुल संभव है होगा!

ZipOutputStream पर putNextEntry विधि का उपयोग कर तो ZipOutputStream पर write फोन करके ज़िप में फ़ाइल में बाइट्स डाल अपने पिन प्रविष्टि बनाएँ। उस विधि के पैरामीटर के लिए, byte[], बस ByteArrayOutputStream से toByteArray विधि के साथ उन्हें निकालें।

और ZipOutputStream कहीं भी भेजा जा सकता है, क्योंकि इसके निर्माता को केवल OutputStream लगता है, इसलिए ऐसा हो सकता है आपकी HTTP प्रतिक्रिया।

+0

ठीक है, यह काम किया! लेकिन मैं निर्देशिकाएं कैसे बना सकता हूं जिसमें वास्तव में फाइलें होंगी? अभी मुझे सभी फाइलें मिलती हैं, ठीक है, लेकिन निर्देशिका को रूट नोड में शून्य-बाइट लंबाई वाली फ़ाइलों के रूप में अनपॅक किया जाता है, इसलिए कोई पदानुक्रम नहीं :-( – trajectory

+1

ज़िप फ़ाइलों में केवल फाइलों की एक विस्तृत सूची होती है। फ़ाइल नाम, हालांकि , पथ जानकारी हो सकती है। बस 'dip/file.txt' जैसे नाम के साथ' ZipEntry' जोड़ें: यह 'file.txt' निर्देशिका' dir' में है। –

+0

हां, पूर्ण यूआरएल जोड़कर सब कुछ काम करता है उम्मीद है। बहुत बहुत धन्यवाद! – trajectory

3

कि तरह काम करेगा:

ZipOutputStream zs = new ZipOutputStream(outputStream) ; 
ZipEntry e = new ZipEntry(fileName); 
zs.putNextEntry(e); 
zs.write(...); 
zs.close(); 
0

इनपुट: डी: /in.xml

आउटपुट: डी: /final.zip (होने 2 फ़ाइलें 001zip.txt, 002zip .txt)

कोड:

package com.stackoverflow.filezip; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 

public class fileZip { 

public static void main(String[] args) { 

    try { 
InputStream in = new FileInputStream("D:/in.xml"); 
OutputStream out= new FileOutputStream("D:/final.zip"); 
ZipOutputStream zs = new ZipOutputStream(out); 

      ZipEntry e1 = new ZipEntry("001zip.txt"); 
      ZipEntry e2 = new ZipEntry("002zip.txt"); 
      zs.putNextEntry(e1); 
      zs.write("test content in file1".getBytes()); 
      zs.putNextEntry(e2); 
      zs.write("test content in file2".getBytes()); 

      zs.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
          } 
             } 
         } 
संबंधित मुद्दे