JavaはZIP減圧と圧縮機能を実装し、基本的にJavaのポリペプチドと再帰技術を使用します。これは、個々のファイルとカスケードフォルダーを圧縮および解凍できます。これは、一部の初心者にとって非常に良い例です。
ZIPは、アーカイブと圧縮の2つの役割を果たします。 GZIPはファイルをアーカイブするのではなく、単一のファイルのみを圧縮します。したがって、UNIXプラットフォームでは、コマンドタールが通常アーカイブファイルを作成するために使用され、コマンドGZIPがアーカイブファイルを圧縮します。
Java I/Oクラスライブラリには、圧縮形式のストリームを読み書きできるクラスも含まれています。圧縮関数を提供するには、既存のI/Oクラスの外側にラップするだけです。これらのクラスは、読者であり作家でもありませんが、inputstreamとoutStreamputのサブクラスです。これは、圧縮アルゴリズムが文字ではなくBYTEをターゲットにしているためです。
関連するクラスとインターフェイス:
チェックサムインターフェイス:クラスADLER32およびCRC32によって実装されるインターフェイス
Adler32:Alder32アルゴリズムを使用して、チェックサムの数を計算します
CRC32:CRC32アルゴリズムを使用して、チェックサムの数を計算します
CheckedInputStream:inputStream派生クラスでは、データの整合性を検証するために使用される入力ストリームのチェックサムを取得できます。
CheckedOutputStream:outputStream派生クラス、データの整合性を確認するために使用される出力ストリームのチェックサムを取得できます
DeflaterOutputStream:圧縮クラスのベースクラス。
zipoutputStream:データをzipファイル形式に圧縮するdeflateroutputStreamのサブクラス。
GZIPOUTPUTSTREAM:データをGZIPファイル形式に圧縮するDEFLATEROUTPUTSTREAMのサブクラス
InflaterInputStream:減圧のための基本クラス
zipinputStream:zip形式のデータを減圧できるインフルターインプートストリームのサブクラス
gzipinputStream:zip形式のデータを解凍できるインフルターインプートストリームのサブクラス
zipentryクラス:zipファイルエントリを表します
zipfileクラス:このクラスは、zipファイルからエントリを読むために使用されます
zipを使用して、複数のファイルを圧縮および解凍します
JavaはZIP形式のライブラリを比較的包括的な方法でサポートしており、複数のファイルを圧縮パッケージに圧縮するために使用する必要があります。このクラスライブラリは標準のZIP形式を使用するため、多くの圧縮ツールと互換性があります。
ZipoutputStreamクラスには、圧縮法セットと圧縮法で使用される圧縮レベルがあります。 zipoutputStream.setMethod(int method)エントリに使用されるデフォルトの圧縮メソッドを設定します。圧縮法が単一のzipファイルエントリに指定されていない限り、zipoutputStreamによって設定された圧縮メソッドが保存されます。デフォルト値はzipoutputStream.defleated(圧縮ストレージを示します)であり、保存するように設定することもできます(パッケージアーカイブストレージのみを示します)。 ZipoutputStreamが圧縮方法をデフレートするように設定した後、SetLevel(intレベル)メソッドをさらに使用して圧縮レベルを設定できます。圧縮レベルの値は0〜9で、合計10レベル(値が大きいほど、圧縮する可能性が高くなります)。デフォルトはdeflater.default_compression = -1です。もちろん、エントリzipentryのsetMethodメソッドを使用して、単一の条件の圧縮方法を設定することもできます。
Zipentryクラスは、ZIPファイルに保存されている圧縮ファイルについて説明します。クラスには、ZIPエントリに関する情報を設定および取得するための複数のメソッドが含まれています。 zipentryクラスは、zipfile [zipfile.getinputStream(zipentry entry)]とzipinputStreamによってzipファイルを読み取るために使用され、zipoutputStreamはzipファイルに書き込みます。いくつかの便利な方法があります:getName()エントリ名を返します。ISDirectory()は、ディレクトリエントリの場合にtrueを返します(ディレクトリエントリは「/'で終了するエントリとして定義されます)、setMethod(intメソッド)エントリの圧縮メソッドを設定します。
次の例では、Javaタイプに付属しているJavaタイプは中国のパスをサポートしないため、Apache Zip Toolkit(パッケージはAnt.jar)を使用しましたが、2つは同じ方法で使用されますが、Apache圧縮ツールにはエンコード方法を設定するためのインターフェイスがあり、その他は基本的に同じです。さらに、org.apache.tools.zip.zipoutputstreamを使用して圧縮する場合、org.apache.tools.zip.zipentryのみを使用して減圧することができ、java.util.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zip.zipentryのみを使用できます。もちろん、ApacheはZipinputStreamクラスを提供しません。
ファイル圧縮:
パッケージギザクション; java.io。 *;インポートJava.util.zip。 *;/** * @author danaソース入力パスとターゲット出力パスは、コードでカスタマイズする必要があります。 * <p> *コードのこのセクションでは、圧縮パーツが実装されています */public class zipcompressing {private int k = 1; //再帰番号変数のprivate void zip(string zipfileName、file inputFile)を定義します。 zipoutputStream out = new ZipoutputStream(new FileOutputStream(ZipFileName)); BufferedOutputStream bo = new BufferedOutputStream(out); zip(out、inputfile、inputfile.getname()、bo); bo.close(); out.close(); //出力ストリームclose system.out.println( "圧縮完了"); } private void zip(zipoutputstream out、file f、string base、bufferedoutputstream bo)スロー例外{//メソッドオーバーロードif(f.isdirectory()){file [] fl = f.listfiles(); if(fl.length == 0){out.putNextentry(new Zipentry(base + "/")); // zip圧縮エントリポイントベースSystem.out.println(base + "/"); } for(int i = 0; i <fl.length; i ++){zip(out、fl [i]、base + "/" + fl [i] .getname()、bo); // subfolders} system.out.println( "th" + k + "sub-recursive"); K ++; } else {out.putnextententry(new zipentry(base)); // zip圧縮エントリポイントベースSystem.out.println(base)を作成します。 fileInputStream in = new fileInputStream(f); BufferedInputStream bi = new BufferedInputStream(in); int b; while((b = bi.read())!= -1){bo.write(b); //バイトストリームを現在のzipディレクトリに書き込みます} bi.close(); in.close(); //入力ストリームclose}}/ *** test* @param args*/ public static void main(string [] args){zipcompressing book = new ZipCompressing(); try {book.zip( "f://ziptest.zip"、new file( "f:// ziptest")); } catch(Exception e){e.printstacktrace(); }}}ファイル減圧:
パッケージGizaction; Import Java.io.BufferedInputStream; Import Java.io.BufferedOutputStream; Import java.io.file; Import java.io.fileinputStream; Import java.io.fileenotfoundexception; Import Java.io.fileOutputStream; Import java.io.ioexception; java.util.zip.zipentry;インポートJava.util.zip.zipinputStream;/** * @author danaソース入力パスとターゲット出力パスは、コードでカスタマイズする必要があります。 * <p> *このコードでは、減圧部分が実装されています。 */ public class zipdecompressing {public static void main(string [] args){// todo auto-fenated method stub long starttime = system.currenttimemillis(); try {zipinputStream zin = new zipinputStream(new fileinputStream( "f://ziptest.zip")); //入力ソースzip bufferedinputStream bin = new bufferedinputStream(zin); string parent = "f:// ziptest //"; //出力パス(フォルダーディレクトリ)ファイルfout = null; Zipentryエントリ; try {while((entr = zin.getNextentry())!= null &&!entry.isdirectory()){fout = new file(parent、entry.getname()); if(!fout.exists()){(new file(fout.getParent()))。mkdirs(); } fileoutputStream out = new fileoutputStream(fout); BufferedOutputStream Bout = new BufferedOutputStream(out); int b; while((b = bin.read())!= -1){bout.write(b); } bout.close(); out.close(); system.out.println(fout+"減圧に成功しました"); } bin.close(); zin.close(); } catch(ioexception e){e.printstacktrace(); }} catch(filenotfoundexception e){e.printstacktrace(); } long endtime = system.currenttimemillis(); System.out.println( "Time-suming:"+(endtime-starttime)+"ms"); }}GZIPで単一のファイルを圧縮します
GZIPのインターフェイスは比較的単純なため、ストリームを圧縮するだけである場合は、使用できます。もちろん、文字ストリームを圧縮し、バイトストリームを圧縮できます。以下は、GBKエンコード形式を圧縮するテキストファイルです。
圧縮クラスの使用は非常に簡単です。 gzipoutputStreamまたはzipoutputStreamを使用して出力ストリームをラップし、GzipinputStreamまたはzipinputStreamを使用して入力ストリームをラップします。残りは通常のI/O操作です。
java.io.bufferedOutputStream; Import java.io.bufferedRear; Import java.io.fileinputStream; Import java.io.fileoutputStream; Import java.io.ioexception; Import Java.io.inputStreamReader; Import Java.util.util.zip.gzipinpunputstream; java.util.zip.gzipoutputStream; public class gzipCompress {public static void main(string [] args)throws ioexception {//文字ファイルを圧縮する準備をします。ここの文字ファイルは、gbk bufferedreader in = new bufferedReader(new inputStreamReader(new FileInputStream( "e:/tmp/source.txt")、 "gbk")); // gzipoutputStreamを使用してoutputStreamストリームをラップして特定の圧縮特性を作成し、最後にtest.txt.gz圧縮パッケージが生成されます// it bufferedoutputStream out = new bufferedoutputStream(new gzipotputStream(new fileoutputStream(test.txt.gz "); System.out.println( "圧縮ファイルの書き込みを開始..."); int c; ((c = in.read())!= -1){ / * *注記は、文字ストリームで読み取られる文字ファイルであり、cはすでにユニコード *コードであるため、cを直接保存できません。 */ out.write(string.valueof((char)c).getBytes( "gbk")); } in.close(); out.close(); system.out.println( "Compresded File ..."); // gzipinputStreamを使用してinputStreamストリームをラップして、bufferedReader in2 = new inputstreamReader(new gzipinputStream(new fileinputStream( "test.txt.gz"))、 "gbk"));文字列s; //圧縮ファイルの内容を読み取りますwhile((s = in2.readline())!= null){system.out.println(s); } in2.close(); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。