この記事では、Javaに実装されたZIP圧縮および減圧ツールクラスについて説明します。次のように、参照のために共有してください。
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.io.ioexception; Import java.io.ioexception; java.util.enumeration; Import org.apache.tools.zip.zipentry; Import org.apache.tools.zip.zipfile; Import org.apache.tools.zipoutputstream; public class ziputil {private static final int final int bufferedsize = 1024; / ** *圧縮ファイル * * @param zipfileName *圧縮パッケージファイルパスを保存 * @param filepath *圧縮する必要があるファイルパス * @param isdelete *ソースファイルを削除する * @throws例外 */パブリックボイドzip(string zipfilename、string filepath、boolean isdelete) isdelete); } / ** *圧縮ファイル * * @param zipfileName *保存された圧縮パッケージファイルパス * @param inputfile *圧縮する必要があるファイル * @param isdelete *ソースファイルを削除する * @throws例外 * /パブリックボイドzip(string zipfilename、file suptile、boolean isdelete(ziptut)exput(ziptut) fileoutputStream(zipfileName)); if(!inputfile.exists()){throw new filenotFoundException( "指定されたパスで圧縮されるファイルは見つかりませんでした!"); } zip(out、inputfile、 ""、isdelete); out.close(); } / ** *再帰圧縮方法 * * @param Out *圧縮パッケージ出力ストリーム * @param f *ファイルは圧縮されます * @param Base *圧縮パス * @param isdelete *ソースファイルを削除するかどうか * / private void zip(zipoutputStream out、zipoutputStream out、file inputfile、string、boolean isdeleter.isdir extruter {) {//ディレクトリファイルの場合[] inputFiles = inputFile.listfiles(); out.putnextentry(new Zipentry(base + "/")); base = base.length()== 0? "":base + "/"; for(int i = 0; i <inputfiles.length; i ++){zip(out、inputfiles [i]、base+inputfiles [i] .getname()、isdelete); }} else {//ファイルの場合if(base.length()> 0){out.putnextentry(new Zipentry(base)); } else {out.putnextentry(new Zipentry(inputFile.getName())); } fileInputStream in = new FileInputStream(inputFile); {int len; byte [] buff = new byte [bufferedsize]; while((len = in.read(buff))!= -1){out.write(buff、0、len); }} catch(ioexception e){shop e; }最後に{in.close(); }} if(isdelete){inputfile.delete(); }} / ** * Decompress * * @param zipfilepath *圧縮パッケージパス * @param filesavepath * unzip path * @param isdelete *ソースファイルを削除するかどうか * @throws例外 * / public void unzip(string zipfilepath、string filesavepath、boolean isdelete))ファイルf = newファイル(zipfilepath); if((!f.exists())&&(f.length()<= 0)){throw new Exception( "減圧されるファイルは存在しません!"); } zipfile zipfile = new zipfile(f); String Strpath、gbkpath、strtemp; file tempfile = new file(filesavepath); //現在のディレクトリから開始strpath = tempfile.getabsolutepath(); while(e.hasmoreElements()){org.apache.tools.zip.zipentry zipent = e.nextelement(); gbkpath = zipent.getName(); if(zipent.isdirectory()){strtemp = strpath + file.separator + gbkpath;ファイルdir = new file(strtemp); dir.mkdirs();続く; } else {// file inputstream is = zipfile.getInputStream(zipent); BufferedInputStream bis = new BufferedInputStream(is); gbkpath = zipent.getName(); strtemp = strpath + file.separator + gbkpath; //ディレクトリ文字列strsubdir = gbkpathを作成します。 for(int i = 0; i <strsubdir.length(); i ++){if(strsubdir.substring(i、i + 1).equalsignorecase( "/")){string temp = strpath + file.separator + strsubdir.substring(0、i); file subdir = new file(temp); if(!subdir.exists())subdir.mkdir(); }} fileoutputStream fos = new fileoutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(FOS); int len; byte [] buff = new byte [bufferedsize]; while((len = bis.read(buff))!= -1){bos.write(buff、0、len); } bos.close(); fos.close(); }}} catch(例外e){e.printstacktrace(); eを投げる; } if(isdelete){new file(zipfilepath).delete(); }} // public static void main(string [] args){// ziputil cpr = new ziputil(); // try {// cpr.zip( "c:/users/lenovo user/desktop/test hisshin.zip"、 "c:/users/users/lenovo user/desktop/new foldter"、fals " user/desktop/test bishen.zip "、" c:/users/lenovo user/desktop/newフォルダー2 "、false); //} catch(exception e){// e.printstacktrace(); //} ////////////////Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Javaファイルの要約とディレクトリ操作スキルの要約」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、「Java操作DOMノードスキルの概要」、「Java Cache操作スキルの要約」を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。