当前位置: 首页 > 知识库问答 >
问题:

Apache Commons压缩:Opening.tar.gz

越风史
2023-03-14

我正在开发一个从tar获取信息的软件。gz文件,我正在使用Apache commons压缩库。但我得到了以下错误:

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

样品焦油。使用的gz文件是eclipse-jee-luna-SR1-linux-gtk-x86_64.tar.gz

下面是使用 lib 的类:

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;
    }
}

共有1个答案

马德厚
2023-03-14

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

tarArchiveInputStream = new TarArchiveInputStream(
                          new GzipCompressorInputStream(
                            new BufferedInputStream(
                              new FileInputStream(fileName))));
 类似资料:
  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • Tango拥有一个默认的压缩中间件,可以按照扩展名来进行文件的压缩。同时,你也可以要求某个Action自动或强制使用某种压缩。比如: type CompressExample struct { tango.Compress // 添加这个匿名结构体,要求这个结构体的方法进行自动检测压缩 } func (CompressExample) Get() string { return f

  • 所有基于http协议的服务器组件均支持压缩,请求头Accept-Encoding的值需要包含deflate或者gzip。 即便请求头Accept-Encoding的值包含deflate或者gzip,服务器还会参考静态变量http_server::zip_min_size(默认1024,即1KB)和http_server::zip_max_size(默认307200,即300KB)来决定是否压缩:仅

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭

  • 本文向大家介绍Android图片压缩(质量压缩和尺寸压缩),包括了Android图片压缩(质量压缩和尺寸压缩)的使用技巧和注意事项,需要的朋友参考一下 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • Stability: 2 - Stable zlib 模块提供通过 Gzip 和 Deflate/Inflate 实现的压缩功能,可以通过这样使用它 const zlib = require('zlib'); 压缩或者解压数据流(例如一个文件)通过zlib流将源数据流传输到目标流中来完成。 const gzip = zlib.createGzip(); const fs = require('f

  • 压缩是一种节省带宽和加快网站速度的简单有效方法。 它仅与现代浏览器兼容,如果您的用户也使用旧版浏览器,则应谨慎使用。 从服务器发送响应时,如果使用压缩,则可以大大缩短加载时间。 我们将使用一个名为koa-compress的中间件来处理文件的压缩以及设置适当的头文件。 继续使用 - 安装中间件 - $ npm install --save koa-compress 现在在你的app.js文件中,添