2012-03-09 62 views
3

是否可以驗證Java中的tar文件,以便我可以確定其他tar實用程序(即UNIX tar命令)可以提取tar?我想在代碼中這樣做,而不是訴諸於根據返回代碼從我的應用程序和報告中實際執行tar -tfJava:驗證TAR文件

我一直在使用Apache commons compress來讀取tars條目(而不是提取它們)。我已經使用文本編輯器手動修改了一些tar以表示「損壞」的tar文件。 Commons壓縮並不總是無法讀取條目,因爲無論我修改什麼,UNIX tar命令或7zip都一直失敗。顯然需要做更多的事情來確保tar文件沒有損壞,但它是什麼?

注意:我沒有真正嘗試通過commons compress來提取tar作爲驗證的一種手段。我不認爲這是一個真正的選擇;我必須處理的tar文件大小很大(3到4個演出),我寧願不會看到這個過程需要比已經做的更長的時間。

回答

0

由於您不想執行tar命令,因此可以使用Apache ANTorg.apache.tools.tar.TarInputStream實現。

個人意見,我沒有嘗試過,我也不是TAR file format的專家,但我會嘗試使用getNextEntry方法迭代TAR文件。假設一旦你完成了所有的沒有錯誤/異常,你(有點)證明TAR文件是「有效的」。

UPDATE:其實上面的維基百科頁面列出了這些Java實現:

聯合戰術空中攻擊包括約untaring TAR文件,我想一個例子,可能修改爲只是「測試」檔案。

String tarFile = "c:/test/test.tar"; 

    // Create a TarInputStream 
    TarInputStream tis = new TarInputStream(new BufferedInputStream(new FileInputStream(tarFile))); 
    TarEntry entry; 
    while((entry = tis.getNextEntry()) != null) { 

     System.out.println(entry.getName()); 

     // The following might not be required, but arguably does 
     // additionally check the content of the archive. 
     int count; 
     byte data[] = new byte[2048]; 

     while((count = tis.read(data)) != -1) { 
     } 
    } 

    tis.close();