从* .gz扩展名中提取文件

时间:2015-04-01 12:07:53

标签: java

我已成功从*.gz中提取*.tgz,现在我不知道如何从*.tgz实际提取最终文件。

有些选项使用自定义程序包,但这对我来说不是一个选项,我只需要使用标准Java程序包

我尝试使用的是*.tgz用于*.gz的相同功能,但它不起作用。

  

java.util.zip.ZipException:不是GZIP格式1.gz

这是提取*.tgz个文件的函数。

public String ExtractFile(String path) {
    try {
        File newFile = new File(this.getFullPathWithoutExtension(path) + ".gz");

        GZIPInputStream gStream;
        FileOutputStream outStream;
        try (FileInputStream fileStream = new FileInputStream(path)) {
            gStream = new GZIPInputStream(fileStream);
            outStream = new FileOutputStream(newFile);
            byte[] buf = new byte[1024];
            int len;
            while ((len = gStream.read(buf)) > 0) {
                outStream.write(buf, 0, len);
            }
        }
        gStream.close();
        outStream.close();

        newFile.createNewFile();

        return newFile.getPath();

    } catch (Exception e) {
        System.out.print(e);
    }

    return null;
}

TL; DR;提取到*.tgz个文件的*.gz个文件,但无法提取*.gz个文件。

1 个答案:

答案 0 :(得分:2)

.tgz文件通常不会被解压缩到.gz文件 - 它将被解压缩到.tar文件。 (.gz文件被gzip压缩; .tar文件是包含多个文件的未压缩存档; .tgz.tar文件,然后被gzip压缩 - 您已经“撤消了“gzipping。”

我不认为在Java的标准库中有任何东西可以处理tar文件 - 所以你要么必须重新访问“我不能使用任何不在标准库中的任何东西”的决定,或者自己重新实现。如果您决定这样做,请file format is easily available