2009-05-23 58 views
6

私は解凍する必要がある100個の.gzファイルを持っています。 私はいくつかの質問がありますバッチで.gzファイルの解凍

a)http://www.roseindia.net/java/beginners/JavaUncompress.shtmlで与えられたコードを使用して、.gzファイルを解凍しています。そのうまく動作します。 Quest: - Zipファイルのファイル名を取得する方法はありますか?私は、JavaのZipクラスが作業するエンタープライズファイルの列挙を提供することを知っています。これは私にファイル名、サイズなどを与えることができます.zipファイルに格納されています。しかし、.gzファイルでも同じことをしているのでしょうか、またはファイル名は.gzを削除したfilename.gzと同じですか?

b)javaコードでユーティリティ関数を呼び出すことによって、.gzファイルを解凍する別の優雅な方法があります。あなたのJavaクラスから7-zipアプリケーションを呼び出すように。それでは、入出力ストリームについて心配する必要はありません。

ありがとうございます。 Kapil

答えて

9

gzipのではないながら、a)のジップは、アーカイブ形式でを試してみました。したがって、エントリイテレータは、gzファイルが圧縮されたtarファイルでなければ、あまり意味がありません。必要なのはおそらく:

File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", "")); 

b)ファイルの圧縮を解除しますか?そうでない場合は、GZIPInputStreamを使用して直接ファイルを読むことができます。中間の解凍は必要ありません。

でも問題ありません。あなたが実際にのみファイルを解凍したいとしましょう。もしそうなら、おそらくこれを使うことができます:

public static File unGzip(File infile, boolean deleteGzipfileOnSuccess) throws IOException { 
    GZIPInputStream gin = new GZIPInputStream(new FileInputStream(infile)); 
    FileOutputStream fos = null; 
    try { 
     File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", "")); 
     fos = new FileOutputStream(outFile); 
     byte[] buf = new byte[100000]; 
     int len; 
     while ((len = gin.read(buf)) > 0) { 
      fos.write(buf, 0, len); 
     } 

     fos.close(); 
     if (deleteGzipfileOnSuccess) { 
      infile.delete(); 
     } 
     return outFile; 
    } finally { 
     if (gin != null) { 
      gin.close();  
     } 
     if (fos != null) { 
      fos.close();  
     } 
    }  
} 
+0

こんにちは、私はuncomprerssingせずにファイルを読むことができます。私は行ごとにそれを読むようなものが欲しい。 ファイルの長さ/行の長さは80文字ではない場合があります。 BufferedReaderは私のために働いていたものです。しかし、GzInputStreamのコンストラクタはありません。 –

+0

私は欲しいものを書くつもりです: BufferedReader in = new BufferedReader(new GzipFileReader(file)); 次に、GzipFileReaderをextends Readerとして実装します。 – fredarin

2

Aに関して、gunzipコマンドは、元の名前から.gzという接尾辞を除いた圧縮されていないファイルを作成します。 man pageを参照してください。

Bについては、特にgunzipが必要ですか、別の圧縮アルゴリズムがありますか? .7zファイルを作成するために7zipで使用されるLZMA圧縮アルゴリズムのjava portがありますが、.gzファイルは処理されません。

0

一度解凍するファイルの数が固定されている場合は、そのために既存のツールを使用しないでください。 for i in *.gz; do gunzip $i; done そして、それは自動的に名前を付けるだろう、Windows上で.gz$

ストリッピング、WinRARの、おそらく、またはgunziphttp://unxutils.sf.netから

0

gzipは通常、単一でのみ使用されてみてください:ポール・森江は気づい として、gunzipはそれを行うことができますファイルなので、には一般にには個々のファイルに関する情報が含まれていません。複数のファイルを1つの圧縮されたアーカイブにまとめるには、まず圧縮されていないTarファイル(個別のコンテンツに関する情報を含む)に結合され、その後、単一のファイルとして圧縮されます。この組み合わせはTarballと呼ばれます。

ZipEntriesと同様に、個々のファイル情報をTarから抽出するライブラリがあります。 One example.まず、.gzファイルを使用するために.gzファイルを一時ファイルに展開するか、少なくともGZipInputStreamをTarライブラリにフィードする必要があります。

また、Javaを使用してコマンドラインから7-Zipを呼び出すこともできます。 7-Zipのコマンドライン構文は次のとおりです。7-Zip Command Line Syntax. Javaからコマンドシェルを呼び出す例:Executing shell commands in Java. .tar.gzまたは.tgzファイルからTarを抽出するには1回、もう一度Tarから個々のファイルを抽出します。

または、簡単なことを行い、簡単なシェルスクリプトやバッチファイルを作成して解凍してください。丸い穴に四角いペグを打ち込む理由はありません。これは、バッチファイルのためのものです。ボーナスとして、それらのパラメータを供給することもできます。これにより、Javaコマンドライン実行の複雑さが大幅に軽減され、Javaコントロールの実行が可能になります。

0

あなたは

gunzip *.gz 
0

.gzファイル(gzipped)は、圧縮ファイルのファイル名を格納できます。たとえば、FuBar.docはmyDocument.gzの中に保存することができ、適切な解凍を行うと、そのファイルをファイル名FuBar.docに復元することができます。残念ながら、java.util.zip.GZIPInputStreamは、アーカイブ内に格納されていてもファイル名を読み取る方法をサポートしていません。

関連する問題