Java Unzip Zip-次のように、複数のファイル(フォルダーを含む):
複数のファイルとフォルダーを圧縮し、複雑なファイルディレクトリを解凍します。
圧縮方法は、1に複数のファイルに圧縮できる変数パラメーターを使用します。それは配列に記述するか、パラメーターリストに1つずつ書き込むことができます...
zipfiles(zip、 "abc"、new file( "d:/english")、new file( "d:/insuing data.xls"));
ファイルディレクトリ構造のテスト:
テストの圧縮コンテンツ:英語フォルダーと同じレベルの2つのExcelファイル
file [] files = new file [] {new file( "d:/hissh")、new file( "d:/insuing data.xls")、new file( "d:/chinese name.xls")};これが圧縮コードです:
/ ** *圧縮ファイル - 再帰通話の外側にある必要があるため、Zipfiles(ZipoutputStream Out、String Path、file ... srcfiles) * @param zip * @param srcfiles * @throws ioexception * @authort * @author isea533 * @param srcfiles * @param zip * @param srcfiles * @param srcfiles * @param srcfiles * @throws zipfiles(zipfiles( IOException {ZipoutputStream Out = new ZipOutputStream(new FileOutputStream(zip)); ziptest.zipfiles(out、path、srcfiles); out.close(); System.out.println( "*****************************圧縮********************************); }/***圧縮ファイルファイル* @param zipfile zipfile* @param srcfiles圧縮ソースファイル* @author isea533*/public static void zipfiles(zipoutputstream out、zipoutputstream out、zipoutputstream out、zipoutputstream out、string path、file ... srcfiles){path = path.replaceall( "/"/"/"/" if(!path.endswith( "/")){path+= "/"; } byte [] buf = new byte [1024]; try {for(int i = 0; i <srcfiles.length; i ++){if(srcfiles [i] .isdirectory()){file [] files = srcfiles [i] .listfiles(); string srcpath = srcfiles [i] .getname(); srcpath = srcpath.replaceall( "//*"、 "/"); if(!srcpath.endswith( "/")){srcpath+= "/"; } out.putNextEntry(new Zipentry(PATH+SRCPATH)); zipfiles(out、path+srcpath、files); } else {fileInputStream in = new fileInputStream(srcfiles [i]); system.out.println(path + srcfiles [i] .getname()); out.putNextEntry(new Zipentry(path + srcfiles [i] .getname())); int len; while((len = in.read(buf))> 0){out.write(buf、0、len); } out.closeentry(); in.close(); }}} catch(例外e){e.printstacktrace(); }}圧縮中に、フォルダーで判断を下し、ファイルを再帰的に圧縮します。
次に解凍:
/ ** *指定されたディレクトリに拡張 * @param zippath * @param descdir * @author isea533 */ public static void unzipfiles(string zippath、string descdir)throws ioexception {unzipfiles(new file(zippath)、descdir); } / ** *ファイルを指定されたディレクトリに解凍します * @param zipfile * @param descdir * @author isea533 * / @suppresswarnings( "rawTypes")public static void unzipfiles(file zipfile、string descdir)throws ioexception {ファイルファイル=新しいファイル(descdir); if(!pathfile.exists()){pathfile.mkdirs(); } zipfile zip = new zipfile(zipfile); for(enumeration entries = zip.getentries(); entries.hasmoreelements();){zipentry entry =(zipentry)entries.nextelement(); string zipentryname = entry.getName(); inputStream in = zip.getInputStream(entry); string outpath =(descdir+zipentryname).replaceall( "//*"、 "/");; //パスが存在するかどうかを判断します。存在しない場合は、ファイルパスファイル= new file(outpath.substring(0、outpath.lastindexof( '/')))を作成します。 if(!file.exists()){file.mkdirs(); } //ファイルのフルパスがフォルダーであるかどうかを判断します。上記でアップロードされた場合、if(new file(outpath).isdirectory()){continue; } //出力ファイルパス情報System.out.println(outpath); outputStream out = new fileoutputStream(outpath); byte [] buf1 = new byte [1024]; int len; while((len = in.read(buf1))> 0){out.write(buf1,0、len); } in.close(); out.close(); } System.out.println("*********************************************"); }減圧するときは、フォルダーが存在しないことを判断し、フォルダーのみを作成し、減圧しないでください...減圧はフォルダーではなくファイル用であり、フォルダーを自分で作成する必要があるためです。
テスト方法:
public static void main(string [] args)throws ioexception {/***圧縮ファイル*/file [] files = new file [] {new file( "d:/nights")、new file( "d:/export data.xls")、new file( "d:/chinese name.xls")};ファイルzip = new file( "d:/compressed.zip"); zipfiles(zip、 "abc"、files); /*** unzip file*/file zipfile = new file( "d:/compressed.zip"); string path = "d:/zipfile/"; unzipfiles(zipfile、path); }テスト方法は例外を処理しません。これは間違っています。模倣しないでください。
出力結果:
ABC/English/Templete.xls
ABC/英語/中国/csdn/isea/533/abc/templete.xls
ABC/英語/中国/csdn/isea/533/abc/zipfile2/templete.xls
ABC/英語/中国/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
ABC/英語/中国/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
ABC/英語/中国/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/card collection list.xls
ABC/英語/中国/csdn/isea/533/abc/zipfile2/card collection list.xls
ABC/英語/中国/csdn/isea/templete.xls
ABC/English/中国/CSDN/ISEA/カードコレクションList.xls
ABC/英語/中国語/CSDN/templete.xls
ABC/英語/カード受信list.xls
ABC/発行data.xls
ABC/中国語name.xls
*******************圧縮完了***************************
d:/zipfile/abc/中国語name.xls
d:/zipfile/abc/isso data.xls
d:/zipfile/abc/english/card receive list.xls
d:/zipfile/abc/english/chinese/csdn/templete.xls
D:/Zipfile/ABC/English/中国/csdn/isea/カードコレクションリスト。xls
d:/zipfile/abc/english/chinese/csdn/isea/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/templete.xls
d:/zipfile/abc/english/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
d:/zipfile/abc/inglish/chinese/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/card collection list.xls
D:/Zipfile/ABC/English/中国/csdn/isea/533/abc/zipfile2/card-received list.xls
****************************
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。