2013-07-08 14 views
8

でzipファイルを作成するにはどうすればzipアーカイブを作成する方法を知っている: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

どちらもJavaのジップutilにも、それぞれのZipEntryのためのコモンズ・圧縮のサポートLZMA圧縮。上記のLZMAコードを使用してサポートするには、おそらくCommons-Compressの拡張に1日か2日かかるでしょうし、STORAGE | DEFLATE。実際、Commons-Compressが、ZipArchiveEntryLZMAのような必要な圧縮方法でZipArchiveEntriesを拡張した、より拡張性のあるアプローチを使用するといいでしょう。そのままでは、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

Apache Commons Compress(2013年10月23日リリース1.6)の最新バージョンは、LZMA圧縮をサポートしています。

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