java.util.zip.ZipException:不是GZIP格式 - commons-compress.jar

时间:2015-11-04 17:47:35

标签: java gzip

我试图首次使用commons-compress.jar解压缩tar文件。这是我的初始代码,它抛出错误。

TarArchiveInputStream myTarFile=new TarArchiveInputStream(
(new GZIPInputStream
(new FileInputStream("C:/Users/abc/xyz_20151010.tar")));
System.out.println(myTarFile.getCurrentEntry());

tar文件包含扩展名为.dat.gz.bak

的文件集

我需要从.dat文件中读取和处理数据。

2 个答案:

答案 0 :(得分:1)

您正在读取tar文件,因为gzip压缩了它的普通tar,只有里面的项目被压缩。

因此,请避免使用此GZIPInputStream,而是逐项进行,使用read()读取它,然后使用GZIPInputstream(ByteArrayInputStream(content))进行处理。您可以考虑创建即时读取内容的输入流。

答案 1 :(得分:1)

如果您的输入文件是.tar.gz,那么您应该将文件包装在TarInputStream中,将tar包装在GZip中。但是从文件名来看,你似乎有一个普通的tar档案。

所以,如果我理解你的输入格式,你需要这样的东西:

public class MyDataReader {

  private final TarArchiveInputStream tar;

  public boolean hasNextData() {
    return tar.getNextTarEntry() != null;
  }

  public MyData nextData() {
    byte[] buff = new byte[tar.getCurrentEntry().getSize()];
    // loop over tar until all entry has been read
    InputStream entry = new ByteArrayInputStream(buff);
    GZIPInputStream gzip = new GZipInputStream(entry);
    // process gzip input stream
  }
}