2010-11-29 23 views
7

क्या कोई भी उस स्ट्रीम को ज़िप करने का तरीका जानता है जिसे आप लिख रहे हैं? मैं डिस्क पर फ़ाइल लिखने से बचने की कोशिश कर रहा हूं, और सोच रहा था कि क्या मैं डेटा को संकुचित कर सकता हूं क्योंकि आप इसे स्ट्रीम में लिख रहे हैं।इसे लिखते समय फ़ाइल को ज़िप कैसे करें?

इसके पीछे उपयोग का मामला यह है कि कच्ची फ़ाइल बहुत बड़ी होगी और हम पूरी चीज़ को डिस्क पर अनजिप लिखने से बचना चाहते हैं।

उत्तर

8

मुझे लगता है कि आपको ZipOutputStream में रुचि होगी। आप उस स्ट्रीम को लिख सकते हैं, और उसके बाद इसे ज़िप फ़ाइल में लिख सकते हैं।

इसके अलावा, working with compressed (zipped) files in Java के लिए इस ट्यूटोरियल को देखें।

 BufferedInputStream origin = null; 
    FileOutputStream dest = new 
     FileOutputStream("c:\\zip\\myfigs.zip"); 
    ZipOutputStream out = new ZipOutputStream(new 
     BufferedOutputStream(dest)); 
    //out.setMethod(ZipOutputStream.DEFLATED); 
    byte data[] = new byte[BUFFER]; 
    // get a list of files from current directory 
    File f = new File("."); 
    String files[] = f.list(); 

    for (int i=0; i<files.length; i++) { 
     System.out.println("Adding: "+files[i]); 
     FileInputStream fi = new 
      FileInputStream(files[i]); 
     origin = new 
      BufferedInputStream(fi, BUFFER); 
     ZipEntry entry = new ZipEntry(files[i]); 
     out.putNextEntry(entry); 
     int count; 
     while((count = origin.read(data, 0, 
      BUFFER)) != -1) { 
      out.write(data, 0, count); 
     } 
     origin.close(); 
    } 
    out.close(); 
+0

मैं इस उदाहरण देखा है, और नहीं लगता था कि यह मैं के लिए क्या देख रहा था। इसके साथ गड़बड़ी करने के बाद, मैं अंत में समझता हूं कि यह क्या करता है। मेरे लिए केवल अंतर यह है कि मैं वास्तव में किसी भी फाइल के माध्यम से पुनरावृत्ति नहीं करूँगा। मैं बस ज़िप फ़ाइल में एक नई प्रविष्टि बनाउंगा, और लिख रहा हूं कि मैं वर्तमान में इस प्रविष्टि में फ़ाइल में क्या लिख ​​रहा हूं। – Andrei

+0

@ एंड्री - हाँ, ऐसा कोई कारण नहीं है कि आपकी ज़िप फ़ाइल में इसके अंदर एक से अधिक फाइलें हों। खुशी हुई यह मदद की! – pkaeding

1

मैं एक webapp में यह किया है से पहले: यहाँ है कि ट्यूटोरियल से एक टुकड़ा है, जो एक उपयोगी उदाहरण हो सकता है। मुझे सर्वलेट आउटपुटस्ट्रीम का संदर्भ मिला और फिर ZipOutputStream पर आपूर्ति की गई। तब मैंने बस ज़िप किया। ज़िप्ड फ़ाइल क्लाइंट ब्राउज़र पर परोसा गया था। आसान।

संबंधित मुद्दे