2015-11-04 54 views
0

我想解壓第一次使用commons-compress.jar的tar文件。這是我最初的代碼是拋出錯誤。java.util.zip.ZipException:不是在GZIP格式 - commons-compress.jar

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

tar文件已設定擴展名的文件的.dat.gz.bak

我需要從.dat文件讀取和處理數據。

回答

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

您正在讀取tar文件,因爲它是普通的tar,而只有內部的項目被壓縮。因此,要避免使用這個GZIPInputStream,而是逐項執行,使用read()讀取它,然後使用GZIPInputstream(ByteArrayInputStream(content))進行處理。您可以考慮創建輸入流,即時讀取內容。

相關問題