この記事では、主にファイルまたはフォルダーを圧縮するためにJava関連クラスの使用を紹介します。
Zlibは、純粋なデータを処理するように設計されたデータ圧縮ライブラリです(データのソースに関係なく)。
7Zは、現在最高の圧縮比を持っている新しい圧縮形式です。
GZIPは、ファイル圧縮ツール(または圧縮ツールによって生成された圧縮ファイル形式)であり、個々のファイルを処理するように設計されています。 GZIPは、ファイル内のデータをzippingするときにzlibを使用します。ファイルプロパティに関連する情報を保存するために、GZIPは圧縮ファイル(*.gz)でより多くのヘッダーコンテンツを保存する必要があり、Zlibはこれを考慮する必要はありません。しかし、GZIPは単一のファイルにのみ適しているため、Unix/Linuxでよく見られる接尾辞は *.tar.gzまたは *.tgzです。つまり、複数のファイルが最初にTARを使用して単一のファイルにパッケージ化され、次にGZIPで圧縮されます。
ZIPは、複数のファイルを圧縮するのに適した形式です(対応するツールにはPKZIPやWinzIPなどが含まれます)。したがって、ZIPファイルには、GZIPのヘッダーよりも多くの情報であるファイルディレクトリ構造に関する情報をさらに含める必要があります。ただし、ZIP形式はさまざまな圧縮アルゴリズムを採用できることに注意する必要があります。一般的なZIPファイルのほとんどはZLIBアルゴリズムを使用して圧縮されておらず、圧縮データの形式はGZIPの形式とは大きく異なります。
したがって、特定のニーズに応じて異なる圧縮技術を選択する必要があります。データを圧縮/解凍するだけである場合は、ZLIBで直接実装できます。 GZIP形式のファイルを生成するか、他のツールの圧縮結果を解凍する必要がある場合は、GZIPまたはZIPおよびその他の関連クラスを使用して処理する必要があります。
メイブン依存関係
<Dependency> groupId> org.apache.commons </groupid> <artifactid> commons-compress </artifactid> <version> 1.12 </version> </dependency>
zip形式
public static void zip(string input、string output、string name)throws exception {zipoutputstream out = new ZipoutputStream(new FileOutputStream(output)); string [] paths = input.split( "// |"); file [] files = new file [paths.length]; byte [] buffer = new byte [1024]; for(int i = 0; i <paths.length; i ++){files [i] = new file(paths [i]); } for(int i = 0; i <files.length; i ++){fileinputStream fis = new fileInputStream(files [i]); if(files.length == 1 && name!= null){out.putnextentry(new Zipentry(name)); } else {out.putnextententry(new Zipentry(files [i] .getname())); } int len; //ファイルのコンテンツを読み取り、zipファイルにダウンロードしてパッケージ化する必要があります。 } out.closeentry(); fis.close(); } out.close(); } out.close(); } GZIPパッケージ
public static void gzip(string input、string output、string name)throws exception {string compress_name = null; if(name!= null){compress_name = name; } else {compress_name = new file(input).getname(); } byte [] buffer = new byte [1024]; try {gzipparameters gp = new gzipparameters(); //圧縮ファイルgp.setFileName(compress_name)にファイル名を設定します。 gzipcompressoroutputStream gcos = new gzipcompressoroutputStream(new fileoutputStream(output)、GP); fileInputStream fis = new fileInputStream(input); int length; while((length = fis.read(buffer))> 0){gcos.write(buffer、0、length); } fis.close(); gcos.finish(); } catch(ioexception ioe){ioe.printstacktrace(); }} 7zパック
public static void z7z(string input、string output、string name)throws exception {try {sevenzoutputfile sevenzoutput = new SevenZoutputFile(new File(output)); SevenzarchiveEntryエントリ= null; string [] paths = input.split( "// |"); file [] files = new file [paths.length]; for(int i = 0; i <paths.length; i ++){files [i] = new file(paths [i] .trim()); } for(int i = 0; i <files.length; i ++){bufferedinputStream input = null; Enter = new BufferedInputStream(new FileInputStream(paths [i])); if(name!= null){entry = sevenzoutput.createarchiveentry(new file(paths [i])、name); } else {entry = sevenzoutput.createarchiveentry(new file(paths [i])、new file(paths [i])。getname()); } sevenzoutput.putarchiveentry(entry); byte [] buffer = new byte [1024]; int len; while((len = enterstream.read(buffer))> 0){sevenzoutput.write(buffer、0、len); } enter.close(); SevenZoutput.ClosearchIveEntry(); } sevenzoutput.close(); } sevenzoutput.close(); } catch(ioexception ioe){system.out.println(ioe.tostring() + "" + input); }} Zlibパッケージ
public static void zlib(string input、string output)throws exception {// deflateroutputstream dos = new deflateroutputStream(new FileoutputStream(output)); deflateParameters dp = new deflateParameters(); dp.setwithzlibheader(true); deflatecompressoroutputStream dcos = new deflateCompressorOutputStream(new FileOutputStream(output)、DP); fileInputStream fis = new fileInputStream(input); int length =(int)new file(input).length();バイトデータ[] = new byte [length]; // int length; while((length = fis.read(data))> 0){dcos.write(data、0、length); } fis.close(); dcos.finish(); dcos.close(); }この記事があなたに役立つことを願っています。これは、ZIP、GZIP、7Z、およびZLIB形式のJava実装の圧縮およびパッケージ化されたコンテンツを導入するためのすべてです。みんなが私たちのウェブサイトをフォローし続けることを願っています! Javaを学びたい場合は、このWebサイトをフォローし続けることができます。