2015-04-01 139 views
0

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

有一些选项使用自定义软件包,但这不是我的选择,我只需要使用标准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文件无法解压。

+0

当你说“我试过的是使用相同的函数,我使用* .tgz为* .gz但它不起作用。”你的意思是你尝试过两次执行相同的解压缩,有效吗? – 2015-04-01 12:16:25

+0

@JonSkeet是的,对于已经提取的文件,它的功能相同。因为在文件浏览器上它说“GZip归档”。 – sed 2015-04-01 12:17:54

回答

2

A .tgz文件通常不会被提取到.gz文件 - 它将被提取到.tar文件。 (A .gz文件gzip压缩;一个.tar文件是包含多个文件未压缩档案;一个.tgz.tar文件,该文件被然后用gzip压缩 - 你已经“未完成”的gzip压缩。)

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

+0

哦,基本上我在提取它们时设置了错误的扩展名?我应该首先将它们设置为'tar'文件? – sed 2015-04-01 12:18:47

+0

@Steve:是的 - 尽管这对你没有多大的帮助。你可以将数据提取到你想要的任何文件名;你仍然必须找到处理tar文件的东西。 – 2015-04-01 12:19:32

+0

是啊,奥奇。我只是从apache使用commons,它工作正常。谢谢。 – sed 2015-04-01 14:59:50