Java met en œuvre les fonctions de décompression et de compression ZIP utilise essentiellement la technologie des polypeptides et des récursitions de Java, qui peuvent compresser et décompresser les fichiers individuels et tous les dossiers en cascade, ce qui est un très bon exemple pour certains débutants.
Zip joue deux rôles: l'archivage et la compression; GZIP n'arrive pas de fichiers, mais compresse uniquement un seul fichier. Par conséquent, sur les plates-formes UNIX, le TAR de commande est généralement utilisé pour créer un fichier d'archive, puis la commande gzip pour compresser le fichier d'archive.
La bibliothèque de classes Java I / S comprend également certaines classes qui peuvent lire et écrire des flux de format compressé. Pour fournir des fonctions de compression, enveloppez-les simplement en dehors des classes d'E / S existantes. Ces classes ne sont pas des lecteurs et des écrivains, mais des sous-classes de l'entrée et de l'entretien. En effet, l'algorithme de compression est ciblant l'octet plutôt que les caractères.
Cours et interfaces connexes:
Interface de somme de contrôle: une interface implémentée par les classes Adler32 et CRC32
Adler32: Utilisez l'algorithme Alder32 pour calculer le nombre de sommes de contrôle
CRC32: Utilisez l'algorithme CRC32 pour calculer le nombre de sommes de contrôle
CheckedInputStream: Classe dérivée de l'entrée, vous pouvez obtenir la somme de contrôle du flux d'entrée, qui est utilisée pour vérifier l'intégrité des données.
VÉRIFICATIONSOITSTREAM: Classe dérivée de sortie de sortie, vous pouvez obtenir la somme de contrôle du flux de sortie, utilisé pour vérifier l'intégrité des données
DeflaterOutputStream: la classe de base de la classe compressée.
ZipOutputStream: une sous-classe de DeflaterOutputStream qui compresse les données au format de fichier zip.
GZIPOutputStream: une sous-classe de DeflaterOutputStream qui comprime les données dans le format de fichier GZIP
Flolaterinputstream: classe de base pour la décompression
ZipinputStream: une sous-classe de FloplaterinputStream, qui peut décompresser les données de format zip
GzipinputStream: une sous-classe de FlolateriNputStream, qui peut décompresser les données de format zip
Classe de ziperie: représente une entrée de fichier zip
Classe ZipFile: cette classe est utilisée pour lire les entrées à partir de fichiers zip
Utilisez Zip pour compresser et décompresser plusieurs fichiers
Java prend en charge la bibliothèque du format ZIP d'une manière relativement complète, et il est nécessaire de l'utiliser pour compresser plusieurs fichiers dans un package compressé. Cette bibliothèque de classe utilise le format zip standard, il est donc compatible avec de nombreux outils de compression.
La classe ZipOutputStream a la méthode de compression définie et le niveau de compression utilisé dans la méthode de compression. zipOutputStream.setMethod (méthode int) Définit la méthode de compression par défaut utilisée pour les entrées. Tant qu'aucune méthode de compression n'est spécifiée pour une seule entrée de fichier zip, la méthode de compression définie par ZipOutputStream est stockée. La valeur par défaut est ZipOutputStream.Deflated (indique le stockage de compression) et peut également être définie sur stockée (indique uniquement le stockage d'archives d'emballage). Une fois que ZipOutputStream a défini la méthode de compression pour dégonfler, nous pouvons en outre utiliser la méthode SetLevel (INT Level) pour définir le niveau de compression. La valeur du niveau de compression est de 0 à 9, avec un total de 10 niveaux (plus la valeur est grande, plus il est susceptible de compresser). La valeur par défaut est Deflater.default_Compression = -1. Bien sûr, nous pouvons également définir la méthode de compression pour une seule condition via la méthode SetMethod du zipentry d'entrée.
La classe de ziperie décrit un fichier compressé stocké dans un fichier zip. La classe contient plusieurs méthodes pour configurer et obtenir des informations sur les entrées ZIP. La classe Zipentry est utilisée par ZipFile [zipfile.getInputStream (Zipentry Entry)] et ZipinputStream pour lire le fichier ZIP, et ZipOutputStream pour écrire dans le fichier zip. Il existe des méthodes utiles: getName () renvoie le nom de l'entrée, IsDirectory () renvoie true s'il s'agit d'une entrée de répertoire (l'entrée du répertoire est définie comme une entrée dont le nom se termine par '/'), SetMethod (INT Method) a défini la méthode de compression pour l'entrée, qui peut être zipOutStream.
Dans l'exemple suivant, nous avons utilisé la boîte à outils Zip Apache (le package est ant.jar), car le type Java est livré avec lui ne prend pas en charge les chemins chinois, mais les deux sont utilisés de la même manière, mais l'outil de compression Apache a plus d'interfaces pour définir des méthodes de codage, et les autres sont essentiellement les mêmes. De plus, si vous utilisez org.apache.tools.zip.zipoutputStream pour compresser, nous ne pouvons utiliser que org.apache.tools.zip.zipentry pour décompresser et ne pas utiliser java.util.zip.zipinputstream pour décompresser et lire. Bien sûr, Apache ne fournit pas la classe ZipinputStream.
Compression de fichiers:
Package Gizaction; Importer Java.io. *; Importer java.util.zip. *; / ** * @author dana ・ li * <p> * Le programme implémente la compression zip [compression] * <p> * Les fonctions générales incluent l'utilisation du polymorphisme, de la récursion et d'autres technologies de base Java. Le chemin d'entrée source et le chemin de sortie cible doivent être personnalisés dans le code. * <p> * Dans cette section du code, la partie de compression est implémentée * / classe publique ZipCompressing {private int k = 1; // Définir la variable récursive variable private void zip (String ZipFileName, File InputFile) lève l'exception {System.out.println ("Compressing ..."); ZipOutputStream out = new ZipOutputStream (new FileOutputStream (zipFileName)); BufferedOutputStream bo = new BufferedOutputStream (out); zip (out, inputfile, inputfile.getName (), bo); bo.Close (); out.close (); // Stream Stream Close System.out.println ("Compression terminée"); } private void zip (zipOutputStream out, fichier f, base de chaîne, buffredoutputStream bo) lève l'exception {// la surcharge de la méthode if (f.isdirectory ()) {file [] fl = f.listFiles (); if (fl.length == 0) {out.putNextStry (new Zipentry (base + "/")); // Créer un point de base de compression de compression Zip System.out.println (base + "/"); } pour (int i = 0; i <fl.length; i ++) {zip (out, fl [i], base + "/" + fl [i] .getName (), bo); // Sous-dossiers de traverse récursivement} System.out.println ("Th" + K + "Sous-récursive"); k ++; } else {out.putNextStry (new Zipentry (base)); // Créer un point de base de compression de compression Zip System.out.println (base); FileInputStream dans = new FileInputStream (f); BufferedInputStream BI = new BufferedInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Écrivez le flux d'octet vers le répertoire ZIP actuel} bi.close (); joindre(); // Stream d'entrée Close}} / ** * test * @param args * / public static void main (String [] args) {ZipCompressing book = new ZipCompressing (); essayez {book.zip ("f: //ziptest.zip", nouveau fichier ("f: // ziptest")); } catch (exception e) {e.printStackTrace (); }}}Décompression des fichiers:
Package Gizaction; Importer java.io.BufferedInputStream; Importer java.io.BufferedOutStream; Importer java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileOutStream; import java.io.ioexception; import java.util.zipream; import; java.util.zip.zipinputStream; / ** * @author dana ・ li * <p> * Le programme implémente la décompression zip [décompression] * <p> * Les fonctions générales incluent l'utilisation de technologies de base Java polymorphes et de récursion. Le chemin d'entrée source et le chemin de sortie cible doivent être personnalisés dans le code. * <p> * Dans ce code, la partie de décompression est implémentée; * / public class ZipDecompressing {public static void main (String [] args) {// TODO Méthode générée automatique Stub Long StartTime = System.currenttimemillis (); try {zipinputStream zin = new ZipinputStream (new FileInputStream ("f: //ziptest.zip")); // le chemin Zip de la source d'entrée BufferedInputStream bin = new BufferedInputStream (zin); String parent = "f: // ziptest //"; // PATH DE SORTIE (répertoire de dossier) Fichier Fout = null; Entrée de ziperie; try {while ((entry = zin.getNextStry ())! = null &&! entrée.isdirectory ()) {fout = new File (parent, entry.getName ()); if (! fout.exists ()) {(nouveau fichier (fout.getParent ())). mkDirs (); } FileOutputStream out = new FileOutputStream (fout); BufferedOutputStream Bout = new BufferedOutputStream (out); int b; while ((b = bin.read ())! = - 1) {bout.write (b); } Boout.close (); out.close (); System.out.println (fout + "décompression réussi"); } Bin.close (); Zin.close (); } catch (ioException e) {e.printStackTrace (); }} catch (filenotFoundException e) {e.printStackTrace (); } Long EndTime = System.CurrentTimeMillis (); System.out.println ("Le temps qui prend du temps:" + (fin de starttime) + "MS"); }}Compression d'un seul fichier avec gzip
L'interface de GZIP est relativement simple, donc si vous avez seulement besoin de compresser un flux, vous pouvez l'utiliser. Bien sûr, il peut compresser les flux de caractères et compresser les flux d'octets. Vous trouverez ci-dessous un fichier texte qui compresse le format de codage GBK.
L'utilisation des cours de compression est très simple; Utilisez simplement GZipOutputStream ou ZipOutputStream pour envelopper le flux de sortie, puis utilisez gzipinputStream ou ZipinputStream pour envelopper le flux d'entrée. Les autres sont des opérations d'E / S ordinaires.
Importer java.io.bufferedoutputStream; Importer java.io.buffereDReader; import java.io.fileInputStream; import java.io.fileOutStream; import java.util.zip.gzipOutputStream; public class gzipCompress {public static void main (string [] args) lève ioException {// se préparer à compresser un fichier de caractères. Notez que le fichier de caractères ici est un codage GBK BuffereDReader dans = new BufferedReader (new inputStreamReader (new FileInputStream ("e: /tmp/source.txt"), "gbk")); // Utilisez gzipOutputStream pour envelopper le flux OutputStream pour fabriquer ses caractéristiques de compression spécifiques, et enfin un package de compression Test.txt.gz sera généré // et il y a un fichier nommé Test.txt dans IT (new FileOutStream out ("test.txtStream (new GZIPOutputStream (new FileOutStream (" test.txt.gz ")); System.out.println ("Commencez à écrire des fichiers compressés ..."); INT C; tandis que ((c = in.read ())! = -1) {/ * * Remarque, voici un fichier de caractères qui est lu dans les flux de caractères, et C ne peut pas être stocké directement, car C est déjà un code Unicode *, qui perdra des informations (bien sûr, le format de codage lui-même est faux), donc il doit être résolu avec GBK puis stocké. * / out.write (string.valueof ((char) c) .getBytes ("gbk")); } in.close (); out.close (); System.out.println ("Démarrer la lecture du fichier compressé ..."); // utilise gzipinputStream pour envelopper le flux InputStream pour le faire décompression de BufferedReader dans 2 = new BufferedReader (new InputStreamReader (new gzipinputStream (new FileInputStream ("test.txt.gz")), "gbk")); String S; // Lire le contenu dans le fichier compressé while ((s = in2.readline ())! = Null) {System.out.println (s); } in2.close (); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.