2013-07-08 6 views
8

साथ जिप बनाने के लिए मुझे कैसे पता चलेगा ज़िप संग्रह बनाने के लिए कैसे:LZMA संपीड़न

import java.io.*; 
import java.util.zip.*; 
public class ZipCreateExample{ 
    public static void main(String[] args) throws Exception 
     // input file 
     FileInputStream in = new FileInputStream("F:/sometxt.txt"); 

     // out put file 
     ZipOutputStream out = new ZipOutputStream(new FileOutputStream("F:/tmp.zip")); 

     // name the file inside the zip file 
     out.putNextEntry(new ZipEntry("zippedjava.txt")); 

     // buffer size 
     byte[] b = new byte[1024]; 
     int count; 

     while ((count = in.read(b)) > 0) { 
      System.out.println(); 
      out.write(b, 0, count); 
     } 
     out.close(); 
     in.close(); 
    } 
} 

लेकिन मैं पता नहीं कैसे LZMA संपीड़न का उपयोग करने के लिए है।

मुझे यह प्रोजेक्ट मिला: https://github.com/jponge/lzma-java जो संपीड़ित फ़ाइल बना रहा है लेकिन मुझे नहीं पता कि मुझे इसे अपने मौजूदा समाधान के साथ कैसे जोड़ना चाहिए।

+0

न तो जावा के पिन util है और न ही प्रत्येक ZipEntry के लिए कॉमन्स कंप्रेस समर्थन LZMA संपीड़न। एलओएमएमए कोड का उपयोग करके और स्टोरेज के लिए चेक ओवरराइड करके इसका समर्थन करने के लिए इसे कॉमन्स-संपीड़ित करने के लिए शायद एक या दो दिन लगेंगे। हवा निकालना। वास्तव में, यह अच्छा होगा अगर कॉमन्स-कंप्रेस एक अधिक विस्तारणीय दृष्टिकोण का उपयोग कर सके जहां ZipArchiveEntries को आवश्यक संपीड़न विधि, जैसे ZipArchiveEntryLZMA के साथ बढ़ाया गया था। जैसा कि है, ZipArchiveOutputStream में इसे बहुत जल्दी करने के लिए बहुत सारे चेक हैं। –

उत्तर

0

वेबसाइट आप का उल्लेख में एक उदाहरण है:

अपनी आवश्यकताओं के अनुकूल:

final File sourceFile = new File("F:/sometxt.txt"); 
final File compressed = File.createTempFile("lzma-java", "compressed"); 

final LzmaOutputStream compressedOut = new LzmaOutputStream.Builder(
     new BufferedOutputStream(new FileOutputStream(compressed))) 
     .useMaximalDictionarySize() 
     .useEndMarkerMode(true) 
     .useBT4MatchFinder() 
     .build(); 

final InputStream sourceIn = new BufferedInputStream(new FileInputStream(sourceFile)); 

IOUtils.copy(sourceIn, compressedOut); 
sourceIn.close(); 
compressedOut.close(); 

(मैं अगर यह काम करता है यह सिर्फ पुस्तकालय का उपयोग और है पता नहीं है, अपने कोड स्निपेट)

+0

जैसा कि मैंने अपने प्रश्न में कहा था कि यह संपीड़ित फ़ाइल नहीं बना है संपीड़ित संग्रह – hudi

+0

क्या यह वही नहीं है? ... आउटपुट इनपुट के बाइट्स की एक संपीड़ित धारा है, जिसे तब फ़ाइल में लिखा जाता है। – matcauthon

+0

नहीं यह इसलिए नहीं है क्योंकि संग्रह में बहुत संकुचित फ़ाइल – hudi

2

अपाचे कॉमन्स संपीड़न का नवीनतम संस्करण (23-अक्टूबर-2013 को जारी 1.6) एलजेएमए संपीड़न का समर्थन करता है।

http://commons.apache.org/proper/commons-compress/examples.html पर विशेष रूप से देखें, विशेष रूप से .7z संपीड़न/असम्पीडित के बारे में।

कहते हैं, उदाहरण के लिए यदि आप एक HTTP प्रतिक्रिया से एक html पृष्ठ संग्रहीत करना चाहते हैं और आप इसे सेक करना चाहते हैं:

SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("outFile.7z")); 

File entryFile = new File(System.getProperty("java.io.tmpdir") + File.separator + "web.html"); 
SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(entryFile, "web.html"); 

sevenZOutput.putArchiveEntry(entry); 
sevenZOutput.write(rawHtml.getBytes()); 
sevenZOutput.closeArchiveEntry(); 
sevenZOutput.close(); 
संबंधित मुद्दे