java - 如何从 Java 中的 7-zip 流中提取文件而不将其存储在硬盘上?

标签 java 7zip compression

我想从 7-zip 字节流中提取一些文件,它不能存储在硬盘上,所以我不能使用 RandomAccessFile 类,我已经阅读了 sevenzipjbinding 源代码,它还解压了一些闭源的文件,比如用其他语言编写的lib7-Zip-JBinding.so。以及官方包SevenZip

的方法

SevenZip.Compression.LZMA.Decoder.Code(java.io.InputStream inStream,java.io.OutputStream outStream,long outSize,ICompressProgressInfo 进度)

只能解压一个文件。

那么如何使用纯 Java 解压缩 7-zip 字节流呢?

有大佬解决吗?

抱歉我的英语不好,我在网上等待你的回答。

最佳答案

Commons compress 1.6 及以上版本支持处理 7z 格式。试试吧。

引用:

http://commons.apache.org/proper/commons-compress/index.html

示例:

    SevenZFile sevenZFile = new SevenZFile(new File("test-documents.7z"));
    SevenZArchiveEntry entry = sevenZFile.getNextEntry();
    while(entry!=null){
        System.out.println(entry.getName());
        FileOutputStream out = new FileOutputStream(entry.getName());
        byte[] content = new byte[(int) entry.getSize()];
        sevenZFile.read(content, 0, content.length);
        out.write(content);
        out.close();
        entry = sevenZFile.getNextEntry();
    }
    sevenZFile.close();

关于java - 如何从 Java 中的 7-zip 流中提取文件而不将其存储在硬盘上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21897286/

相关文章:

java - split() 方法在 Java 中如何工作?

c++ - lzma 从内存中压缩/解压缩 C++

减少内存占用的 Java 集

java - 在执行下一行调用者之前,Java 是否等待 thread.interrupt() 完成处理 InterruptedExceptoin ?

Akka 的 Java 聚合器

c# - PsExec 1.98(从 C# 进程派生)在跨域运行 7Zip 时永远不会完成

C++ zilib deflate/inflate 和 ztream 参数

php - 在将文本存储到数据库之前压缩文本

java - 如何在java中以字符串形式获取控制台的输出

batch-file - 对于 7z zip 的文件,仅最后修改的文件