Wie kann man mit Java eine Datei zippen?
Das Beispiel komprimiert eine Datei und speichert sie in einem
ZIP-Archiv. Hierzu wird zunächst das Archiv selbst durch
Aufruf des Konstruktors der Klasse ZipOutputStream
aufgerufen, dem ein Objekt eines FileOutputStream
als Parameter übergeben wird. Diesem muss seinerseits der
Pfad des Zip-Archivs übergeben werden. Existiert das
Archiv, so wird es überschrieben, im anderen Fall wird es
neu erstellt.
Nach dem Erzeugen eines InputStream
zum Lesen der zu komprimierenden Datei, wird dem Archiv durch
die Methode putNextEntry()
ein neuer Eintrag
hinzugefügt. Der Eintrag besteht aus einem Objekt vom Typ ZipEntry
.
Dem Objekt kann bei Bedarf eine Größe, ein Kommentar,
ein Modifizierungszeitpunkt oder eine Komprimierungsmethode
durch entsprechende Setter-Methoden übergeben werden. Wird
keine Komprimierungsmethode spezifiziert, so wird diejenige des
ZipOutputStream
verwendet, der in der
Standardeinstellung eine Komprimierung vornimmt. Er besitzt wie
ZipEntry
ebenfalls eine Methode setMethod()
,
mit der diese Eigenschaft eingestellt werden kann.
Als nächstes wird ein Array
deklariert, in das der Inhalt der zu speichernden Datei
nacheinander eingelesen wird. Dies geschieht durch die Methode read()
des FileInputStream
innerhalb einer Schleife. Sie
gibt die Größe der gelesenen Byte zurück und
liest so lange, wie weiterer Inhalt gelesen werden kann. Am Ende
wird 0 zurück gegeben.
Der Vorgang wird durch
Schließen des Eintrags und der beiden Ströme
abgeschlossen.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class DateiZippen {
public static void main(String[] args) {
zipFile("/Users/joecze/Desktop/test.log", "/Users/joecze/Desktop/test.zip");
}
private static void zipFile(String inFileName, String outFileName){
ZipOutputStream zos = null;
FileInputStream fis = null;
try {
zos = new ZipOutputStream(
new FileOutputStream(outFileName));
fis = new FileInputStream(inFileName);
zos.putNextEntry(new ZipEntry(new File(inFileName).getName()));
int len;
byte[] buffer = new byte[2048];
while ((len = fis.read(buffer, 0, buffer.length)) > 0) {
zos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fis != null){
try {
fis.close();
} catch (IOException e) {}
}
if(zos != null){
try {
zos.closeEntry();
zos.close();
} catch (IOException e) {}
}
}
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.