Java Unzip Zip - vários arquivos (incluindo pastas), como segue:
Compressa vários arquivos e pastas e descompacte os diretórios de arquivos complexos.
O método de compactação usa parâmetros variáveis, que podem comprimir 1 a vários arquivos. Pode ser escrito em uma matriz ou escrito na lista de parâmetros um por um ...
ZipFiles (ZIP, "ABC", novo arquivo ("d:/inglês"), novo arquivo ("d:/emitindo data.xls"));Estrutura do diretório de arquivos de teste:
O conteúdo compactado do teste: pasta em inglês e dois arquivos do Excel do mesmo nível
Arquivo [] arquivos = novo arquivo [] {new File ("d:/inglês"), novo arquivo ("d:/emitindo data.xls"), novo arquivo ("d:/names chineses")};Aqui está o código compactado:
/ ** * Arquivo comprimido - Como o out precisa estar fora da chamada recursiva, encapsular um método para * chamar ZipFiles (ZipOutputStream Out, String Path, File ... srcfiles) * @param zip * @param path * @param srcfiles * @throws ioexception * @author isaea53 */ public sratic srcfiles * @throws * lança ioexception {zipOutputStream Out = new ZipOutputStream (new FileOutputStream (ZIP)); Ziptest.zipfiles (fora, caminho, srcfiles); out.Close (); System.out.println ("********************************* } /** * Compressed file-File * @param zipFile zipfile* @param srcFiles The compressed source file* @author isea533 */ public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){ path = path.replaceAll("//*", "/"); if (! path.endswith ("/")) {path+= "/"; } byte [] buf = novo byte [1024]; tente {for (int i = 0; i <srcfiles.length; i ++) {if (srcfiles [i] .isdirectory ()) {file [] arquivos = srcfiles [i] .listfiles (); String srcpath = srcfiles [i] .getName (); srcpath = srcpath.replaceall ("//*", "/"); if (! srcpath.endswith ("/")) {srcpath+= "/"; } out.putNextEntry (novo Zipentry (Path+SRCPath)); Zipfiles (fora, caminho+srcpath, arquivos); } else {fileInputStream in = new FileInputStream (srcfiles [i]); System.out.println (caminho + srcfiles [i] .getName ()); out.putNextEntry (nova zipentry (caminho + srcfiles [i] .getName ())); int len; while ((len = in.read (buf))> 0) {out.write (buf, 0, len); } out.CloseEntry (); in.Close (); }}} catch (Exceção e) {e.printStackTrace (); }}Durante a compactação, faça julgamentos na pasta e comprime recursivamente o arquivo.
Então descompacte:
/ ** * UNZIP para o diretório especificado * @param zippath * @param descdir * @author isea533 */ public static void unzipfiles (string zippath, string descdir) lança ioexception {unzipfiles (novo arquivo (zippath), descdir); } / ** * descompacte o arquivo para o diretório especificado * @param zipfile * @param descdir * @author isea533 * / @suppresswarnings ("rawtypes") public static void uNzipfile (file string, string descdir) touws ioException {Pathfiles if (! PATHFILE.EXIST ()) {PATHFILE.MKDIRS (); } Zipfile zip = new ZipFile (zipfile); para (entradas de enumeração = zip.getentries (); entres.hasMoreElements ();) {entrada de zipentry = (zipentry) entres.nextElement (); String zipentryName = Entry.getName (); InputStream in = zip.getInputStream (entrada); String outpath = (descdir+zipentryName) .replaceall ("//*", "/") ;; // julga se o caminho existe. Se não existir, crie o arquivo de arquivo de caminho do arquivo = novo arquivo (outpath.substring (0, outpath.LastIndexof ('/'))); if (! file.exists ()) {file.mkdirs (); } // julgue se o caminho completo do arquivo é uma pasta. Se tiver sido carregado acima, não há necessidade de descomprimir se (novo arquivo (outpath) .IsDirectory ()) {continue; } // Saída do arquivo de arquivo Information.out.println (outpath); OutputStream out = new FileOutputStream (outpath); byte [] buf1 = novo byte [1024]; int len; while ((len = in.read (Buf1))> 0) {out.Write (Buf1,0, Len); } in.close (); out.Close (); } System.out.println ("*********************************************"); }Ao descomprimir, determine que a pasta não existe e só crie a pasta, não a descompacte ... porque a descompressão é para arquivos, não pastas e pastas precisam ser criadas por si mesmas.
Método de teste:
public static void main (string [] args) lança ioexception {/*** arquivo compactado*/arquivo [] arquivos = novo arquivo [] {new File ("d:/inglês"), novo arquivo ("d:/export data.xls"), novo arquivo ("d:/chinês name.xls")}; Arquivo zip = novo arquivo ("d: /compressed.zip"); Zipfiles (zip, "abc", arquivos); /*** FILE UNZIP*/FILE ZIPFILE = NOVO FILE ("D: /COMPRESSED.ZIP"); String path = "d:/zipfile/"; descompactfiles (zipfile, caminho); }O método de teste não lida com a exceção, isso está errado, por favor, não o imite.
Resultado da saída:
ABC/English/Templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/Templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/ZIPFILE2/Templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/Templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/Templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/LISTA DE CARTÃO.XLS
ABC/Inglês/Chinês/CSDN/ISEA/533/ABC/ZIPFILE2/LISTA DE CARTÃO.XLS
ABC/inglês/chinês/csdn/isea/templete.xls
ABC/Inglês/Chinês/CSDN/ISEA/Coleta de Cartas List.xls
abc/inglês/chinês/csdn/templete.xls
ABC/inglês/cartão de recebimento List.xls
ABC/emitir dados.xls
ABC/Name Chinese.xls
*********************
d:/zipfile/abc/names chineses.xls
d:/zipfile/abc/issue data.xls
d:/zipfile/abc/inglês/cartão de recebimento list.xls
d: /zipfile/abc/english/chinese/csdn/templete.xls
d:/zipfile/abc/inglês/chinês/csdn/ISEA/lista de coleta de cartões.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/inglês/chinês/csdn/iSea/533/abc/zipfile2/zipfile/abc/zipfile2/list.xls
d:/zipfile/abc/inglês/chinês/csdn/iSea/533/abc/zipfile2/list recebeu.xls
************************************
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.