Cet article présente principalement l'utilisation des classes liées à Java pour compresser des fichiers ou des dossiers.
ZLIB est une bibliothèque de compression de données conçue pour traiter les données pures (quelle que soit la source des données).
7Z est un nouveau format de compression qui a actuellement le rapport de compression le plus élevé.
GZIP est un outil de compression de fichiers (ou le format de fichier compressé généré par l'outil de compression) et est conçu pour traiter les fichiers individuels. GZIP utilise ZLIB lors de la fermeture de données dans un fichier. Afin d'enregistrer des informations liées aux propriétés des fichiers, GZIP doit enregistrer plus de contenu d'en-tête dans le fichier compressé (* .gz), et ZLIB n'a pas besoin de considérer cela. Mais GZIP convient uniquement à un seul fichier, donc les suffixes que nous voyons souvent sur Unix / Linux sont * .tar.gz ou * .tgz, ce qui signifie que plusieurs fichiers sont d'abord emballés en un seul fichier avec TAR, puis compressés avec GZIP.
Zip est un format adapté à la compression de plusieurs fichiers (les outils correspondants incluent PKZIP et WinZip, etc.). Par conséquent, le fichier ZIP doit contenir en outre des informations sur la structure du répertoire de fichiers, ce qui est plus d'informations que l'en-tête de GZIP. Cependant, il convient de noter que le format ZIP peut adopter une variété d'algorithmes de compression. La plupart de nos fichiers zip communs ne sont pas compressés à l'aide de l'algorithme ZLIB, et le format des données compressées est très différent de celui de GZIP.
Par conséquent, vous devez choisir différentes techniques de compression en fonction de vos besoins spécifiques: si vous avez seulement besoin de compresser / décompresser les données, vous pouvez les implémenter directement avec ZLIB. Si vous devez générer des fichiers de format GZIP ou décompresser les résultats de compression d'autres outils, vous devez utiliser GZIP ou ZIP et d'autres classes connexes pour le gérer.
Dépendance Maven
<dependency> <proupId> org.apache.commons </rompuprid> <letfactId> Commons-compress </retifactid> <version> 1.12 </-version> </dependency>
format zip
public static void zip (entrée de chaîne, sortie de chaîne, nom de chaîne) lève l'exception {zipOutputStream out = new ZipOutputStream (new FileOutputStream (output)); String [] paths = input.split ("// |"); File [] files = nouveau fichier [paths.length]; octet [] tampon = nouveau octet [1024]; for (int i = 0; i <paths.length; i ++) {fichiers [i] = nouveau fichier (paths [i]); } pour (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.putNexTENTRY (new Zipentry (fichiers [i] .getName ())); } int len; // Lisez le contenu du fichier que vous devez télécharger et le coller dans le fichier zip while ((len = fis.read (tampon))> 0) {out.write (tampon, 0, len); } out.closeEntry (); fis.close (); } out.close (); } out.close (); } package gzip
public static void gzip (entrée de chaîne, sortie de chaîne, nom de chaîne) lève l'exception {string compress_name = null; if (name! = null) {compress_name = name; } else {compress_name = new file (input) .getName (); } octet [] buffer = nouveau octet [1024]; essayez {gzipparameters gp = new gzipparameters (); // Définissez le nom de fichier dans le fichier compressé gp.setFileName (compress_name); GzipCompressorOutputStream gcos = new gzipcompressoroutputStream (new FileOutputStream (sortie), gp); FileInputStream fis = new FileInputStream (entrée); longueur int; while ((longueur = fis.read (tampon))> 0) {gcos.write (tampon, 0, longueur); } fis.close (); gcos.finish (); } catch (ioException ioe) {ioe.printStackTrace (); }} Pack 7z
public static void z7Z (entrée de chaîne, sortie de chaîne, nom de chaîne) lève une exception {try {septZOutputFile septZOutput = new SevenzOutputFile (nouveau fichier (sortie)); SeptZarchiveEntry Entry = null; String [] paths = input.split ("// |"); File [] files = nouveau fichier [paths.length]; for (int i = 0; i <paths.length; i ++) {fichiers [i] = nouveau fichier (paths [i] .trim ()); } pour (int i = 0; i <files.length; i ++) {BufferedInputStream input = null; Entrée = new BufferedInputStream (new FileInputStream (paths [i])); if (name! = null) {entry = SevenzOutput.CreatandEntry (nouveau fichier (paths [i]), name); } else {entry = SevenzOutput.CreatHidSiveEntry (nouveau fichier (paths [i]), nouveau fichier (paths [i]). getName ()); } SevenzOutput.PUTarCheEntry (entrée); octet [] tampon = nouveau octet [1024]; int len; while ((Len = enterStream.read (tampon))> 0) {septZOutput.Write (Buffer, 0, Len); } enter.close (); septzOutput.closeChandIventry (); } SevenzOutput.close (); } SevenzOutput.close (); } catch (ioException ioe) {System.out.println (ioe.toString () + "" + entrée); }} Package ZLIB
public static void zlib (entrée de chaîne, sortie de chaîne) lève une exception {// deflaterOutputStream dos = new DeflaterOutputStream (new FileOutputStream (output)); DeflateParameters dp = new DeflateParameters (); dp.setwithzlibheader (true); DeflateCompressorOutputStream dcos = new DeflateCompressorOutputStream (new FileOutputStream (sortie), DP); FileInputStream fis = new FileInputStream (entrée); int length = (int) Nouveau fichier (entrée) .length (); Données d'octets [] = nouveau octet [longueur]; // int le long; while ((longueur = fis.read (data))> 0) {dcos.write (data, 0, longueur); } fis.close (); dcos.finish (); dcos.close (); }J'espère que cet article vous sera utile. Tout cela est pour vous d'introduire le contenu compressé et emballé de la mise en œuvre Java des formats ZIP, GZIP, 7Z et ZLIB. J'espère que tout le monde continuera à suivre notre site Web! Si vous souhaitez apprendre Java, vous pouvez continuer à suivre ce site Web.