Komprimierung und Dekomprimierung in Java
1. Lesen und schreiben Sie die Zip-Datei mit java.util.zip
Um die Komprimierung und die Dekomprimierung zu handeln, bieten JDK Ihnen eine Package java.util.zip mit einigen Class
leider kann die Bibliothek die üblichen Format wie rar oder 7zip nicht lesen und dekomprimieren. Um die Format wie rar, 7zip, .. zu behandeln, brauchen Sie eine andere Bibliothek. In Unterlagen meine ich die anderen Bibliothek für Umgang mit dieser Arbeit .
leider kann die Bibliothek die üblichen Format wie rar oder 7zip nicht lesen und dekomprimieren. Um die Format wie rar, 7zip, .. zu behandeln, brauchen Sie eine andere Bibliothek. In Unterlagen meine ich die anderen Bibliothek für Umgang mit dieser Arbeit .
Das ist eine Image von einer Zip file, die von dem Instrument Winrar. geöffnet wird
java.util.zip sieht die file in die Zip File als ZipEntry.
ListZipEntriesDemo.java
package org.o7planning.tutorial.javaiozip;
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ListZipEntriesDemo {
public static void main(String[] args) {
String FILE_PATH = "C:/test/datas.zip";
ZipInputStream zipIs = null;
try {
// Das Objekt ZipInputStream erstellen um die Zip File zu lesen.
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
ZipEntry entry = null;
// Jeder Entry durchsuchen (vom oben nach hinten bis zum Ende)
while ((entry = zipIs.getNextEntry()) != null) {
if (entry.isDirectory()) {
System.out.print("Directory: ");
} else {
System.out.print("File: ");
}
System.out.println(entry.getName());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
zipIs.close();
} catch (Exception e) {
}
}
}
}
Das Ergebnis von Beispiel
Beispiel: Dekomprimierung einer Zip File in einem Ordner
UnZipDemo.java
package org.o7planning.tutorial.javaiozip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnZipDemo {
public static void main(String[] args) {
final String OUTPUT_FOLDER = "C:/output";
String FILE_PATH = "C:/test/datas.zip";
// Einen Output Verzeichnis wenn er existiert nicht.
File folder = new File(OUTPUT_FOLDER);
if (!folder.exists()) {
folder.mkdirs();
}
// Einen Puffer erstellen (buffer).
byte[] buffer = new byte[1024];
ZipInputStream zipIs = null;
try {
// Ein Objekt ZipInputStream um die File aus einen Pfad zu lesen.
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
ZipEntry entry = null;
// Jeder Entry durchsuchen (vom oben nach hinten bis zum Ende)
while ((entry = zipIs.getNextEntry()) != null) {
String entryName = entry.getName();
String outFileName = OUTPUT_FOLDER + File.separator + entryName;
System.out.println("Unzip: " + outFileName);
if (entry.isDirectory()) {
// Die Verzeichnisse erstellen.
new File(outFileName).mkdirs();
} else {
// Einen Stream erstellen um die Daten in die File zu schreiben.
FileOutputStream fos = new FileOutputStream(outFileName);
int len;
// Die Daten auf die aktuellen Entry lesen
while ((len = zipIs.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
zipIs.close();
} catch (Exception e) {
}
}
}
}
Das Ergebni von dem Beispiel:
Einen Ordner komprimieren
ZipDirectory.java
package org.o7planning.tutorial.javaiozip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipDirectory {
public ZipDirectory() {
}
// Die Methode zur Komprimierung eines Verzeichnis.
public void zipDirectory(File inputDir, File outputZipFile) {
// Den Vaterverzeichnis für die Outputfile erstellen (output file).
outputZipFile.getParentFile().mkdirs();
String inputDirPath = inputDir.getAbsolutePath();
byte[] buffer = new byte[1024];
FileOutputStream fileOs = null;
ZipOutputStream zipOs = null;
try {
List<File> allFiles = this.listChildFiles(inputDir);
// Das Objekt ZipOutputStream erstellen um die Zip File zu aufschreiben
fileOs = new FileOutputStream(outputZipFile);
//
zipOs = new ZipOutputStream(fileOs);
for (File file : allFiles) {
String filePath = file.getAbsolutePath();
System.out.println("Zipping " + filePath);
// entryName: is a relative path.
String entryName = filePath.substring(inputDirPath.length() + 1);
ZipEntry ze = new ZipEntry(entryName);
// Ein Entry in die Zip File einfügen.
zipOs.putNextEntry(ze);
// Die Daten der File lesen und in ZipOutputStream aufschreiben.
FileInputStream fileIs = new FileInputStream(filePath);
int len;
while ((len = fileIs.read(buffer)) > 0) {
zipOs.write(buffer, 0, len);
}
fileIs.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuite(zipOs);
closeQuite(fileOs);
}
}
private void closeQuite(OutputStream out) {
try {
out.close();
} catch (Exception e) {
}
}
// Die Methode gibt die Liste der File zurück, einschließend die Sub-File der Outputverzeichnis
private List<File> listChildFiles(File dir) throws IOException {
List<File> allFiles = new ArrayList<File>();
File[] childFiles = dir.listFiles();
for (File file : childFiles) {
if (file.isFile()) {
allFiles.add(file);
} else {
List<File> files = this.listChildFiles(file);
allFiles.addAll(files);
}
}
return allFiles;
}
public static void main(String[] args) {
ZipDirectory zipDir = new ZipDirectory();
File inputDir = new File("C:/datas");
File outputZipFile = new File("C:/output/datas.zip");
zipDir.zipDirectory(inputDir, outputZipFile);
}
}
Das Ergebnis von dem Beispiel
2. Lesen und schreiben Sie die Jar-Datei mit java.util.jar
Auf dem Wesen ist das Lesen und Schreiben einer jar file nicht unterschiedlich mit der Zip file.
- JarInputStream wird aus ZipInputStream ausgeweitert und unterstützt die Funktion vom Lesen der Information MANIFEST.
- JarOutputStream wird aus ZipOutputStream ausgeweitert und unterstützt die Funktion vom Schreiben der Information MANIFEST.
Die üblichen Bibliothek jar file von Java hat die sehr einfachen Information MANIFEST .
Das unten Beispiel: eine File MANIFEST.MF , die in einer jar file von der Applikaton RAP eingepackt wird, hat mehre Information
Das unten Beispiel: eine File MANIFEST.MF , die in einer jar file von der Applikaton RAP eingepackt wird, hat mehre Information
META-INF/MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: RAPWorkbenchTutorial
Bundle-SymbolicName: RAPWorkbenchTutorial;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: rapworkbenchtutorial.Activator
Require-Bundle: org.eclipse.rap.ui;bundle-version="2.3.0",
org.apache.felix.gogo.command;bundle-version="0.10.0",
org.apache.felix.gogo.runtime;bundle-version="0.10.0",
org.apache.felix.gogo.shell;bundle-version="0.10.0",
org.eclipse.equinox.console;bundle-version="1.1.0",
org.eclipse.equinox.http.jetty;bundle-version="3.0.200",
org.eclipse.equinox.ds;bundle-version="1.4.200",
org.eclipse.rap.rwt.osgi;bundle-version="2.3.0",
org.eclipse.rap.design.example;bundle-version="2.3.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Ein Beispiel von der Öffnung einer jar file mit Winrar:
Die Elemente in die jar file werden als JarEntry.gesehen
Ein einfaches Beispiel vom Lesen der Information MANIFEST von einer jar file. Unten ist die Image von der Inhalt einer einfachen File Manifest
ReadJarFileDemo.java
package org.o7planning.tutorial.jar;
import java.io.FileInputStream;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
public class ReadJarFileDemo {
public static void main(String[] args) {
String FILE_PATH = "C:/DevPrograms/Java/jdk1.7.0_45/lib/dt.jar";
JarInputStream zipIs = null;
try {
// Das Objekt JarInputStream erstellen um die File jar zu lesen.
zipIs = new JarInputStream(new FileInputStream(FILE_PATH));
// Die Information Manifest lesen
Manifest manifest = zipIs.getManifest();
Attributes atts = manifest.getMainAttributes();
String version = atts.getValue("Manifest-Version");
String createdBy = atts.getValue("Created-By");
System.out.println("Manifest-Version:" + version);
System.out.println("Created-By:" + createdBy);
System.out.println("========================");
JarEntry entry = null;
// Jeder Entry durchsuchen (vom oben nach hinten zum Ende)
while ((entry = zipIs.getNextJarEntry()) != null) {
if (entry.isDirectory()) {
System.out.print("Folder: ");
} else {
System.out.print("File: ");
}
System.out.println(entry.getName());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
zipIs.close();
} catch (Exception e) {
}
}
}
}
Das Ergebnis von dem Beispiel
3. Arbeit mit RAR
Sie brauchen eine Open Source Code Bibliothek, um die Rar file zu bearbeiten. Sie können die folgenden Bibliothek benutzen. Sie werden nach der abnehmenden Reihenfolge geschätzt
In diesem Unterlagen gebe ich die Hinweise bei der Benutzung von JUnRar (Die Version bei der Zeitpunkt 9-2014 ist die Version 0.7)
Download junrar:
Java Grundlagen
- Anpassen von Java-Compiler, der Ihre Annotation verarbeitet (Annotation Processing Tool)
- Java Programmierung für Team mit Eclipse und SVN
- Die Anleitung zu Java WeakReference
- Die Anleitung zu Java PhantomReference
- Komprimierung und Dekomprimierung in Java
- Konfigurieren von Eclipse zur Verwendung des JDK anstelle von JRE
- Java-Methoden String.format() und printf()
- Syntax und neue Funktionen in Java 8
- Die Anleitung zu Java Reguläre Ausdrücke
- Die Anleitung zu Java Multithreading Programming
- JDBC Driver Bibliotheken für verschiedene Arten von Datenbank in Java
- Die Anleitung zu Java JDBC
- Holen Sie sich die automatisch erhöhenden Wert der Spalte bei dem Insert eines Rekord, der JDBC benutzt
- Die Anleitung zu Java Stream
- Die Anleitung zu Java Functional Interface
- Einführung in Raspberry Pi
- Die Anleitung zu Java Predicate
- Abstrakte Klasse und Interface in Java
- Zugriffsmodifikatoren (Access modifiers) in Java
- Die Anleitung zu Java Enum
- Die Anleitung zu Java Annotation
- Vergleichen und Sortieren in Java
- Die Anleitung zu Java String, StringBuffer und StringBuilder
- Die Anleitung zu Java Exception
- Die Anleitung zu Java Generics
- Manipulieren von Dateien und Verzeichnissen in Java
- Die Anleitung zu Java BiPredicate
- Die Anleitung zu Java Consumer
- Die Anleitung zu Java BiConsumer
- Was ist erforderlich, um mit Java zu beginnen?
- Geschichte von Java und der Unterschied zwischen Oracle JDK und OpenJDK
- Installieren Sie Java unter Windows
- Installieren Sie Java unter Ubuntu
- Installieren Sie OpenJDK unter Ubuntu
- Installieren Sie Eclipse
- Installieren Sie Eclipse unter Ubuntu
- Schnelle lernen Java für Anfänger
- Geschichte von Bits und Bytes in der Informatik
- Datentypen in Java
- Bitweise Operationen
- if else Anweisung in Java
- Switch Anweisung in Java
- Schleifen in Java
- Die Anleitung zu Java Array
- JDK Javadoc im CHM-Format
- Vererbung und Polymorphismus in Java
- Die Anleitung zu Java Function
- Die Anleitung zu Java BiFunction
- Beispiel für Java Encoding und Decoding mit Apache Base64
- Die Anleitung zu Java Reflection
- Java-Remote-Methodenaufruf - Java RMI
- Die Anleitung zu Java Socket
- Welche Plattform sollten Sie wählen für Applikationen Java Desktop entwickeln?
- Die Anleitung zu Java Commons IO
- Die Anleitung zu Java Commons Email
- Die Anleitung zu Java Commons Logging
- Java System.identityHashCode, Object.hashCode und Object.equals verstehen
- Die Anleitung zu Java SoftReference
- Die Anleitung zu Java Supplier
- Java Aspect Oriented Programming mit AspectJ (AOP)
Show More
- Anleitungen Java Servlet/JSP
- Die Anleitungen Java Collections Framework
- Java API für HTML & XML
- Die Anleitungen Java IO
- Die Anleitungen Java Date Time
- Anleitungen Spring Boot
- Anleitungen Maven
- Anleitungen Gradle
- Anleitungen Java Web Services
- Anleitungen Java SWT
- Die Anleitungen JavaFX
- Die Anleitungen Oracle Java ADF
- Die Anleitungen Struts2 Framework
- Anleitungen Spring Cloud