Apache Commons Compress使用7zip

16

我试图使用从Apache Commons Compress示例网页获取的以下代码来创建一个Zip文件,使用SevenZ类希望它比普通的Java Zip更快地压缩。以下是我的代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    BufferedInputStream instream = new BufferedInputStream(new FileInputStream("c:/temp/test.txt"));

    SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("c:/temp/7ztest.zip"));
    SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(new File("c:/temp/test.txt"),"blah.txt");
    sevenZOutput.putArchiveEntry(entry);
    byte[] buffer = new byte[1024];
    int len;
    while ((len = instream.read(buffer)) > 0) {sevenZOutput.write(buffer, 0, len);}

    sevenZOutput.closeArchiveEntry();
    sevenZOutput.close();
    instream.close();
    }catch(IOException ioe) {
        System.out.println(ioe.toString());

    }
}

我遇到了一个看起来毫无关联的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org.tukaani.xz.FilterOptions at java.lang.J9VMInternals.verifyImpl(Native Method) at java.lang.J9VMInternals.verify(J9VMInternals.java:93)

我已经导入了Apache的相关包:

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry; import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;

但是我不确定org.tukaani.xz.FilterOptions是什么,它似乎并不属于Apache Commons Compress。有什么想法吗?


值得注意的是,当您解压缩文件时,它会抛出一个错误,因为您将其压缩成7z文件,但扩展名为.zip。 - Ivan Aranibar
1个回答

31

正如Apache Commons的“已知限制”页面所述:

“该格式需要否则是可选的Java XZ库。”

这个依赖关系对于其他格式是可选的,但是你需要它来使用7zip。

<dependency>
  <groupId>org.tukaani</groupId>
  <artifactId>xz</artifactId>
  <version>1.5</version>
</dependency>

2
注意:Apache Commons Compression(1.14)的当前版本需要xz的1.6版本。 - Henrik Aasted Sørensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接