0

获取 org.tukaani.xz.CorruptedInputException:提取 7z 文件时压缩数据损坏错误。我正在使用 common-compress-1.21.jar 和 xz-1.9.jar。这是我的代码

    File f = new File("/home/local/Documents/7zFile/7zFile.7z");
    InputStream inputStream;
    ArchiveEntry entry = null;
    try {
        inputStream = new FileInputStream(f);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    if (!inputStream.markSupported()) {
        inputStream = new BufferedInputStream(inputStream);
    }
       
    inputStream.mark(Integer.MAX_VALUE);
    byte[] inputData = IOUtils.toByteArray(inputStream);
    inputStream.reset();
    SeekableInMemoryByteChannel channel = new              
                                   SeekableInMemoryByteChannel(inputData);        
    sevenZFile = new SevenZFile(channel);
            while ((sevenZFile!=null && (entry = sevenZFile.getNextEntry()) != null)) {
                             System.out.print(entry.getName());                                  
            }

堆栈跟踪错误

org.tukaani.xz.CorruptedInputException: Compressed data is corrupt
at org.tukaani.xz.LZMAInputStream.read(Unknown Source)
at org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:88)
at org.apache.commons.compress.utils.IOUtils.copyRange(IOUtils.java:330)
at org.apache.commons.compress.utils.IOUtils.copyRange(IOUtils.java:301)
at org.apache.commons.compress.utils.IOUtils.readRange(IOUtils.java:350)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.readEncodedHeader(SevenZFile.java:706)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.initializeArchive(SevenZFile.java:544)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.readHeaders(SevenZFile.java:474)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:343)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:255)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:183)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:167)

在这一行中,sevenZFile = new SevenZFile(channel);它的抛出错误。

我已经在 ubuntu OS 中为这个文件创建了 7z 存档文件,它抛出异常,我创建的在线网站的 7z 存档工作正常。ubuntu有什么问题吗?以及如何解决这个问题? e 提前致谢。

4

1 回答 1

0

LZMA 数据具有流结束标记。这样的 .7z 文件是有效的,但很少见。XZ for Java 1.9 特别添加了一个特性。请找到此链接以更好地理解。https://issues.apache.org/jira/browse/COMPRESS-591

https://sourceforge.net/p/lzmautils/discussion/708858/thread/822d80d5ea/

于 2021-09-10T23:40:01.603 回答