Java implementiert ZIP -Dekompression und Komprimierungsfunktionen verwenden im Grunde genommen die Polypeptide und Rekursionstechnologie von Java, die einzelne Dateien und alle Kaskadierungsordner komprimieren und dekomprimieren können, was für einige Anfänger ein sehr gutes Beispiel ist.
ZIP spielt zwei Rollen: Archivierung und Komprimierung; GZIP archiviert keine Dateien, sondern komprimiert nur eine einzige Datei. Auf UNIX -Plattformen wird daher der Befehlstar normalerweise verwendet, um eine Archivdatei zu erstellen und dann den Befehl GZIP, um die Archivdatei zu komprimieren.
Die Java -E/A -Klassenbibliothek enthält auch einige Klassen, in denen komprimierte Formatströme gelesen und schreiben können. Um Komprimierungsfunktionen bereitzustellen, wickeln Sie sie einfach außerhalb der vorhandenen E/A -Klassen ein. Diese Klassen sind nicht Leser und Schriftsteller, sondern Unterklassen von InputStream und Outstreamput. Dies liegt daran, dass der Komprimierungsalgorithmus eher auf Byte als auf Zeichen abzielt.
Verwandte Klassen und Schnittstellen:
Prüfsummenschnittstelle: Eine Schnittstelle, die von den Klassen ADLER32 und CRC32 implementiert ist
ADLER32: Verwenden Sie den Alder32 -Algorithmus, um die Anzahl der Prüfsummen zu berechnen
CRC32: Verwenden Sie den CRC32 -Algorithmus, um die Anzahl der Prüfsummen zu berechnen
CheckedInputStream: InputStream -abgeleitete Klasse, Sie können die Prüfsumme des Eingabestreams erhalten, mit der die Integrität der Daten überprüft wird.
CheckedOutputStream: Ausleitete Klasse Output Stream, Sie können die Prüfsumme des Ausgabestreams erhalten, um die Integrität der Daten zu überprüfen
DeflateroutputStream: Die Basisklasse der komprimierten Klasse.
ZipoutputStream: Eine Unterklasse von DeflateroutputStream, die Daten in ZIP -Dateiformat komprimiert.
GzipoutputStream: Eine Unterklasse von DeflateroutputStream, die Daten in das Gzip -Dateiformat komprimiert
InflaterInputStream: Basisklasse für die Dekompression
ZipinputStream: Eine Unterklasse von InflaterinputStream, die Daten zum Zip -Format dekomprimieren kann
GzipinputStream: Eine Unterklasse von InflaterInputStream, die Daten zum Zip -Format dekomprimieren kann
ZIPentry -Klasse: repräsentiert einen ZIP -Dateieintrag
Zipfile -Klasse: Diese Klasse wird verwendet, um Einträge aus ZIP -Dateien zu lesen
Verwenden Sie ZIP, um mehrere Dateien zu komprimieren und zu dekomprimieren
Java unterstützt relativ umfassende ZIP -Formatbibliothek und es ist erforderlich, sie zu verwenden, um mehrere Dateien in ein komprimiertes Paket zu komprimieren. Diese Klassenbibliothek verwendet das Standard -ZIP -Format und ist daher mit vielen Komprimierungswerkzeugen kompatibel.
Die ZipoutputStream -Klasse hat den Komprimierungsmethodesatz und die Komprimierungsstufe im Komprimierungsmethode. ZipoutputStream.setMethod (int -Methode) legt die für Einträge verwendete Standardkomprimierungsmethode fest. Solange für einen einzelnen Zip -Dateieintrag keine Komprimierungsmethode angegeben wird, wird die durch ZipoutputStream festgelegte Komprimierungsmethode gespeichert. Der Standardwert ist ZipoutputStream.Deflated (zeigt den Komprimierungsspeicher an) und kann auch auf gespeichert eingestellt werden (zeigt nur Speicherarchivspeicher an). Nachdem ZipoutputStream die Komprimierungsmethode auf Deflation gesetzt hat, können wir die SETLEVEL -Methode (intlevel) weiter verwenden, um die Komprimierungsstufe festzulegen. Der Komprimierungspegelwert beträgt 0-9 mit insgesamt 10 Niveaus (je größer der Wert ist, desto wahrscheinlicher ist es, dass er komprimiert wird). Der Standard ist Deflater.Default_Compression = -1. Natürlich können wir die Komprimierungsmethode für einen einzelnen Zustand über die SetMethod -Methode der Eintrags -Zipentrie festlegen.
Die Zipentry -Klasse beschreibt eine komprimierte Datei, die in einer ZIP -Datei gespeichert ist. Die Klasse enthält mehrere Methoden, um Informationen zu ZIP -Einträgen einzurichten und zu erhalten. Die Zipentry -Klasse wird von Zipfile [ZipFile.getInputStream (Zipentry -Eintrag)] und ZipinputStream verwendet, um die ZIP -Datei zu lesen, und ZipoutputStream, um in die ZIP -Datei zu schreiben. Es gibt einige nützliche Methoden: GetName () gibt den Eintragsnamen zurück, isDirectory () true zurück, wenn es sich um einen Verzeichniseintrag handelt (der Verzeichniseintrag wird definiert als ein Eintrag, dessen Name mit '/' endet), setMethod (int -Methode) die Komprimierungsmethode für den Eintrag festgelegt, der ZipoutputStream.Stream oder ZipoutputStream.
Im folgenden Beispiel haben wir das Apache -ZIP -Toolkit (das Paket ist Ant.jar) verwendet, da der Java -Typ nicht chinesische Pfade unterstützt, aber die beiden werden auf die gleiche Weise verwendet, aber das Apache -Komprimierungs -Tool verfügt über mehr Schnittstellen, um Codierungsmethoden festzulegen, und die anderen sind im Grunde genommen gleich. Wenn Sie org.apache.tools.zip.zipoutputStream verwenden, können wir außerdem nur org.apache.tools.zip.zipentry verwenden, um zu dekomprimieren, und können nicht java.util.zip.zipinputstream verwenden, um zu dekomprimieren und zu lesen. Natürlich liefert Apache die ZipinputStream -Klasse nicht.
Dateikomprimierung:
Paket Gizaction; import Java.io. *; Import Java.util.zip. Der Quelleingangspfad und der Zielausgangspfad müssen im Code angepasst werden. * <p> * In diesem Codeabschnitt wird der Komprimierungsteil implementiert */öffentliche Klasse Zip -Compressing {private int k = 1; // Definieren Sie die rekursive Zahlenvariable private void Zip (String zipfilename, Dateieingabedatei) Ausnahme {System.out.println ("Komprimierung ..."); ZipoutputStream out = neuer zipoutputStream (neuer FileOutputStream (Zipfilename)); BufferedOutputStream bo = neuer bufferedOutputStream (out); ZIP (out, InputFile, inputFile.getName (), bo); bo.close (); out.close (); // Ausgabestream Close System.out.println ("Komprimierung abgeschlossen"); } private void zip (ZipoutputStream, Datei F, String -Basis, BufferedOutputStream BO) löst Ausnahme aus {// Methodenüberladung if (f.isdirectory ()) {file [] fl = f.listfiles (); if (fl.Length == 0) {out.putNextEntry (neu Zipentry (Base + "/")); // Erstellen Sie ZIP -Komprimierung Einstiegspunkt -Basissystem.out.println (Base + "/"); } für (int i = 0; i <fl.length; i ++) {ZIP (out, fl [i], base + "/" + fl [i] .getName (), bo); // rekursiv durch die Subordner} system.out.println ("Th" + k + "subrecursive"); K ++; } else {out.putNextEntry (neu Zipentry (Basis)); // ZIP -Komprimierung Einstiegspunkt -Basissystem erstellen.out.println (Basis); FileInputStream in = new FileInputStream (f); BuferedInputStream bi = neuer bufferedInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Schreiben Sie den Byte -Stream in das aktuelle Zip -Verzeichnis} bi.close (); in.close (); // Eingabestream schließen}}/ *** test* @param args*/ public static void main (String [] args) {Zip -Compressing book = new ZipCompressing (); try {book.zip ("f: //ziptest.zip", neue Datei ("f: // ziptest")); } catch (Ausnahme e) {e.printstacktrace (); }}}Datei Dekompression:
Paket Gizaction; import Java.io.BufferedInputStream; Import Java.io.BuffeedOutputStream; Import Java.io.file; Import Java.io.FileInputStream; Import Java.io.filenotfoundException; Import Java.io.Utilstream; java.util.zip.zipinputstream;/** * @author dana ・ li * <p> * Das Programm implementiert die ZIP-Dekompression [Dekompression] * <p> * Die allgemeinen Funktionen enthalten die Verwendung polymorpher und revursionsartiger Java-Kerntechnologien, die individuelle Dateien und alle Kasscatten-Ordnungen verkaufen und dekomprimieren können. Der Quelleingangspfad und der Zielausgangspfad müssen im Code angepasst werden. * <p> * In diesem Code wird der Dekompressionsteil implementiert; */ public class zipdecompressing {public static void main (String [] args) {// Todo automatisch generierte Methode Stub Long startTime = System.currentTimemillis (); try {zipinputStream zin = neu zipinputStream (neuer FileInputStream ("f: //ziptest.zip"); // Eingabequelle Zip -Pfad BufferedInputStream bin = new BufferedInputStream (Zin); String Parent = "f: // ziptest //"; // Ausgabe Pfad (Ordner Directory) Datei fout = null; Zipentry -Eintrag; try {while ((Eintrag = zin.getNextEntry ())! if (! fout.exists ()) {(neue Datei (fout.getParent ())). mkdirs (); } FileOutputStream out = new FileOutputStream (FOut); PufufferedOutputStream bout = new bufferedOutputStream (out); int b; while ((b = bin.read ())! =-1) {bout.write (b); } Bout.close (); out.close (); System.out.println (Fout+"Dekompression erfolgreich"); } Bin.close (); Zin.close (); } catch (ioException e) {e.printstacktrace (); }} catch (FilenotFoundException e) {e.printstacktrace (); } Long EndTime = System.currentTimemillis (); System.out.println ("zeitaufwändig:"+(Endime-StartTime)+"MS"); }}Komprimierung einer einzelnen Datei mit GZIP
Die Schnittstelle von GZIP ist relativ einfach. Wenn Sie also nur einen Stream komprimieren müssen, können Sie ihn verwenden. Natürlich kann es Zeichenströme komprimieren und Byte -Streams komprimieren. Unten finden Sie eine Textdatei, die das GBK -Codierungsformat komprimiert.
Die Verwendung von Kompressionsklassen ist sehr einfach; Verwenden Sie einfach GzipoutputStream oder ZipoutputStream, um den Ausgangsstrom zu wickeln, und verwenden Sie dann GzipinputStream oder ZipinputStream, um den Eingangsstrom einzuwickeln. Der Rest sind einige gewöhnliche E/A -Operationen.
Import Java.io.BuffenedOutputStream; Import Java.io.BuffenedReader; Import Java.io.FileInputStream; Import Java.io.FileOutputStream; Import Java.io.ioException; Importion Java.io.inputstreamReader; Import Java.util.zip.zip.gzip.gzip.gzipinputstream; java.util.zip.gzipoutputStream; public class gzipcompress {public static void main (String [] args) löst ioException {// Bereiten Sie vor, um eine Zeichendatei zu komprimieren. Beachten Sie, dass die Zeichendatei hier ein GBK -Coding BuferedReader in = New BufferedReader (neuer InputStreamReader (neuer FileInputStream ("e: /tmp/source.txt"), "GBK")) ist. // Verwenden Sie GzipoutputStream, um den OutputStream -Stream zu wickeln, um seine spezifischen Komprimierungseigenschaften zu erstellen. System.out.println ("Schreiben von komprimierten Dateien starten ..."); int c; Während ((c = in.read ())! */ out.write (String.Valueof ((char) c) .getBytes ("gbk")); } in.close (); out.close (); System.out.println ("Lesen Sie die komprimierte Datei mit Start ..."); // Verwenden Sie GzipinputStream, um den InputStream -Stream zu wickeln, um den BufferedReader in2 = neuer BufferedReader (neuer InputStreamReader (neuer GzipinputStream (neuer FileInputStream ("test.txt.gz"), "GBK") zu machen. String S; // Lesen Sie die Inhalte in der komprimierten Datei während ((s = in2.Readline ())! = Null) {System.out.println (s); } in2.close (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.