2012-03-09 14 views
3

Javaのtarファイルを検証して、他のtarユーティリティ(UNIXのtarコマンドなど)がtarを抽出できることを確認できますか?私はコードでこれを行いたいと思いますし、私のアプリケーションから実際にtar -tfを実行し、リターンコードに基づいてレポートを作成することに頼らないでください。Java:TARファイルを検証する

私は、Apache Commons compressを使用して、tarsエントリを読み込み(それらを抽出しない)しています。私は、テキストエディタを使って "壊れた" tarファイルを表現するためにtarのいくつかを手動で修正しました。 Commons compressは、UNIXのtarコマンドや7zipが私が何を変更しても一貫して失敗した場合には、必ずしもエントリを読み取ることができません。明らかに、tarファイルが壊れていないことを実際に保証するために何かを行う必要がありますが、それは何ですか?

注:私は実際に検証の手段としてcommons compressを使用してtarを抽出しようとはしていません。私はこれが本当にオプションだとは思わない。私が扱わなければならないtarファイルのサイズは大きく(3〜4ギガ)、私はこのプロセスが既に行われているよりも長くかかるとは思っていません。

答えて

0

tarコマンドを実行したくないので、org.apache.tools.tar.TarInputStreamの実装をApache ANTにすることができます。

私はそれを試したことがなく、私はTAR file formatの専門家ではありませんが、getNextEntryメソッドを使用してTARファイルを反復しようとします。エラー/例外を除いてすべてを完了したら、TARファイルが「有効」であることが(幾分)証明されます。

UPDATE:実際には上記のWikipediaのページには、これらのJava実装を示しています

Jtarが、私は推測するTARファイルを、untaringについて例を可能性が含まれますアーカイブを単に "テスト"するように変更することができます。

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(); 
関連する問題