2013-07-08 22 views
8

ile zip oluşturmak için nasıl zip arşivi oluşturmak için biliyorum:lzma sıkıştırma

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

Ama lzma sıkıştırma nasıl kullanılacağını bilmiyorsunuz.

Bu projeyi buldum: https://github.com/jponge/lzma-java Sıkıştırılmış dosya oluşturma ancak mevcut çözümümle nasıl birleştirmem gerektiğini bilmiyorum. ihtiyaçlarınıza Uyarlanmış

: Bahsettiğiniz sitesinde bir örnek vardır

+0

Ne Java'nın Zip util ne de her ZipEntry için Commons-sıkıştır destek LZMA sıkıştırma. Muhtemelen bir veya iki gün süren Commons-Compress'in yukarıdaki LZMA kodunu kullanarak ve STORAGE | DEFLATE. Aslında, Commons-Compress'in ZipArchiveEntries'in ZipArchiveEntryLZMA gibi gerekli sıkıştırma yöntemiyle genişletildiği daha genişletilebilir bir yaklaşım kullanması hoş olurdu. Olduğu gibi, hızlı bir şekilde yapmak için ZipArchiveOutputStream içinde çok fazla kontrol var. –

cevap

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

(eğer çalışırsa ben sadece kütüphanenin kullanımı ve olduğunu bilmiyorum senin kod snippet'i)

+0

Soruda söylediğim gibi bu sadece sıkıştırılmış dosya sıkıştırılmış arşiv oluşturmuyor – hudi

+0

değil mi? ... Çıktı sadece bir dosyaya yazılan giriş (ler) in bayt sıkıştırılmış bir akışıdır. – matcauthon

+0

nope değil, çünkü arşiv çok sayıda sıkıştırılmış dosya içerebilir – hudi

2

Apache Commons Compress'in (23 Ekim 2013'te yayımlanan 1.6) en son sürümü LZMA sıkıştırmasını destekler.

Özellikle .7z sıkıştırma/açma ile ilgili http://commons.apache.org/proper/commons-compress/examples.html'a bakın.

bir HTTP Response gelen bir html sayfasını kaydetmek istediğiniz ve bunu sıkıştırmak istediğiniz örneğin ki:

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(); 
İlgili konular