java - Apache Commons 压缩 : Opening . tar.gz

标签 java apache-commons-compress

我正在开发一个将从 tar.gz 文件中获取信息的软件,并且我正在使用 Apache commons-compress 库。但是我收到以下错误:

Caused by: java.lang.IllegalArgumentException: Invalid byte 4 at offset 0 in 'O�!�C' len=8
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:134)
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:166)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:953)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:940)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:324)
at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:274)
... 2 more

使用的示例 tar.gz 文件是 eclipse-jee-luna-SR1-linux-gtk-x86_64.tar.gz

这是使用库的类:

public class TarGzBuildAdapter extends BuildAdapter {
    public TarGzBuildAdapter(File build) {
        super(build);
    }

    @Override
    public List<ArtifactInfo> getArtifactInfos() throws IOException {
        TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(
                new FileInputStream(this.build));
        TarArchiveEntry tarArchiveEntry;
        List<ArtifactInfo> artifactInfos = new LinkedList<ArtifactInfo>();

        while ((tarArchiveEntry = tarArchiveInputStream.getNextTarEntry()) != null) {
            System.out.println(String.format("Name: %s LinkName: %s Size: %Ld RealSize: %Ld",
                    tarArchiveEntry.getName(), tarArchiveEntry.getLinkName(),
                    tarArchiveEntry.getSize(), tarArchiveEntry.getRealSize()));
            artifactInfos.add(new ArtifactInfo(tarArchiveEntry.getName(), tarArchiveEntry
                    .getRealSize()));
        }

        tarArchiveInputStream.close();

        return artifactInfos;
    }
}

最佳答案

您读取了文件,它不是 TAR 而是 GZ 流。您需要先解压缩它,然后才能使用 TarArchiveInputStream

tarArchiveInputStream = new TarArchiveInputStream(
                          new GzipCompressorInputStream(
                            new BufferedInputStream(
                              new FileInputStream(fileName))));

关于java - Apache Commons 压缩 : Opening . tar.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158140/

相关文章:

java - 如何使用 Java 下载 WordPress

java - 无需解压即可预览 .7z 内容和子文件夹

java - Gson - 将 JSON 解析为对象时忽略 json 字段

java - 失败 - 在上下文路径/RxCircle 中部署了应用程序,但上下文无法启动

Java 循环 - 中断?继续?

java - 如何使用 Apache Commons 解压缩 BZIP(不是 BZIP2)

android dalvik vm-heap 在 XZ 压缩时内存分配不足

java - Spring Boot - 使用 inMemoryAuthentication

java - 如果指定端口,HttpGet 将返回 500 错误