9

我知道如何创建 zip 存档:

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 ,它创建了压缩文件,但我不知道应该如何将它与我现有的解决方案结合起来。

4

3 回答 3

3

最新版本的 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();
于 2013-11-08T10:08:59.253 回答
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();

(我不知道它是否有效,它只是库的使用和你的代码片段)

于 2013-07-08T10:51:17.850 回答
0

zip4jvm支持 zip 存档的 LZMA 压缩。

ZipEntrySettings entrySettings = ZipEntrySettings.builder()
                                                 .compression(Compression.LZMA, CompressionLevel.NORMAL)
                                                 .lzmaEosMarker(true).build();
ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build();

Path file = Paths.get("F:/sometxt.txt");
Path zip = Paths.get("F:/tmp.zip");

ZipIt.zip(zip).settings(settings).add(file);
于 2020-02-13T23:15:22.113 回答