2015-04-01 141 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