Este artículo describe las clases de herramientas de compresión y descompresión postal implementadas en Java. Compártelo para su referencia, como sigue:
import java.io.bufferedInputStream; import java.io.bufferedOutputStream; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileOutputStream; import java.io.io.iMe java.util.enumeration; import org.apache.tools.zip.zipentry; import org.apache.tools.zip.zipfile; import org.apache.tools.zip.zipoutputstream; Ziputil de clase pública {INTATAL INT INT INT BufferedSize = 1024; / ** * archivo comprimido * * @param zipFileName * ruta de archivo de paquete comprimido guardado * @param filepath * carpeta o ruta de archivo que debe comprimirse * @param isDelete * si eliminar el archivo de origen * @throws excepción */ public void zip (string zipfilame, string filePath, boolean) lanza la excepción {ZIPFILEME (ZIPFILEN Archivo (filepath), isDelete); } / ** * archivo comprimido * * @param zipFileName * ruta de archivo de paquete comprimido guardado * @param InputFile * Carpeta o archivo que debe comprimirse * @param isDelete * si se elimina el archivo de origen * @throws excepción * / public void Zip (string zipfileNeam, archivo de entrada, boolean). ZipOutputStream (nuevo FileOutputStream (ZIPFileName)); if (! inputFile.Exists ()) {tirar nueva FileNotFoundException ("¡No se encontró ningún archivo para comprimirse en la ruta especificada!"); } zip (out, inputfile, "", isDelete); out.close (); } / ** * Método de compresión recursivo * * @Param Out * STRANTE de salida de paquete comprimido * @param f * El archivo se comprimirá * @param base * ruta comprimida * @param isdelete * si eliminar el archivo de origen * @throws excepción * / private void zip (zipOutputStream out, archivo de entrada de archivo, string base, boolean isdelete) lanza {si if {si if {if {if {if { (inputFile.IsDirectory ()) {// Si es un archivo de directorio [] 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 {// Si es un archivo if (base.length ()> 0) {out.putNextEntry (new ZipEntry (base)); } else {out.putNextEntry (new ZipEntry (inputFile.getName ())); } FileInputStream in = new FileInputStream (InputFile); intente {int len; byte [] buff = new Byte [BufferedSize]; while ((len = in.read (buff))! = -1) {out.write (buff, 0, len); }} Catch (ioException e) {Throw E; } finalmente {in.close (); }} if (isDelete) {inputFile.Delete (); }} / ** * DECOMPRESS * * @param zipFilePath * Patía del paquete de compresas * @param filesavePath * unzip ruta * @param isDelete * si eliminar el archivo de origen * @throws excepción * / public void unzip (string zipFilePath, string filesavepath, boolean) lanza excepción {try {(new (new (new (new (new (new (new (new (new (new (new (new (New Archivo (filesApath)). Mkdirs (); Archivo f = nuevo archivo (zipFilePath); if ((! f.exists ()) && (f.length () <= 0)) {tire nueva excepción ("El archivo para descomprimirse no existe!"); } Zipfile zipfile = new zipfile (f); Cadena strpath, gbkpath, strtemp; Archivo tempfile = nuevo archivo (filesavePath); // Iniciar desde el directorio actual strpath = tempfile.getabsolutePath (); // La posición absoluta de la enumeración de salida <Zipentry> e = zipfile.getentries (); while (e.hasmoreelements ()) {org.apache.tools.zip.zipentry zipent = e.nextelement (); gbkpath = zipent.getName (); if (zipent.isDirectory ()) {strtemp = strpath + file.separator + gbkpath; Archivo dir = nuevo archivo (strtemp); dir.mkdirs (); continuar; } else {// leer y escribir el archivo inputStream es = zipfile.getInputStream (zipent); BufferedinputStream bis = new BufferedInputStream (is); gbkpath = zipent.getName (); strtemp = strpath + file.separator + gbkpath; // Crear cadena de directorio 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); Archivo subdir = nuevo archivo (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 (Exception e) {E.PrintStackTrace (); tirar E; } if (isDelete) {nuevo archivo (ZipFilePath) .Delete (); } }// public static void main(String[] args) {// ZipUtil cpr = new ZipUtil();// try {// cpr.zip("C:/Users/Lenovo User/Desktop/test Chinese.zip", "C:/Users/Lenovo User/Desktop/New folder", false);// cpr.unZip("C:/Users/Lenovo User/Desktop/test chino.zip "," c:/users/lenovo user/escritorio/nueva carpeta 2 ", falso); //} catch (excepción e) {// e.printstacktrace (); //} ////}}Para obtener más información sobre los algoritmos Java, los lectores interesados en este sitio pueden ver los temas: "Resumen de archivos Java y habilidades de operación de directorio", "Tutorial sobre estructuras de datos de Java y algoritmos", "Resumen de habilidades de nodo DOM de operación Java" y "Resumen de habilidades de operación de cache de Java"
Espero que este artículo sea útil para la programación Java de todos.