/*
** This file is part of Filius, a network construction and simulation software.
**
** Originally created at the University of Siegen, Institute "Didactics of
** Informatics and E-Learning" by a students' project group:
** members (2006-2007):
** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding,
** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer
** supervisors:
** Stefan Freischlad (maintainer until 2009), Peer Stechert
** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de>
** and Stefan Freischlad
** Filius is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 2 of the License, or
** (at your option) version 3.
**
** Filius is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
** PURPOSE. See the GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Filius. If not, see <http://www.gnu.org/licenses/>.
*/
package filius.rahmenprogramm;
import java.util.zip.*;
import java.io.*;
import filius.Main;
public class ErzeugeZipDatei {
/**
* @author weyer
* Die Klasse kopiert den Inhalt eines Verzeichnisses in eine
* Zip-Datei und speichert diese in diesem Verzeichnis.
* @param dir Verzeichnis, dessen Inhalt in eine Zip-Datei eingelesen werden soll.
* @param zipFileName Der Name, den die Zip-Datei haben soll.
* @throws IOException
*/
public ErzeugeZipDatei(String verzeichnis, String zipFileName) throws IOException {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+", constr: ErzeugeZipDatei("+verzeichnis+","+zipFileName+")");
// Puffer zum Auslesen der Dateien. // Der vollständige Pfad zur zukünftigen Zip-Datei.
String dirFile = verzeichnis + zipFileName;
// Die Dateien werden in diese Datei geschrieben.
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(dirFile));
// Das Verzeichnis, dessen Dateien gesichert werden sollen.
File dirZip = new File(verzeichnis);
zipDatei(dirZip, zipOut);
// Die Zip-Datei ist erzeugt.
zipOut.close();
}
/**
* @author weyer
* @param dirZip
* @param zipOut
* @throws IOException
*/
public void zipDatei(File verzeichnisZip, ZipOutputStream zipOut) throws IOException {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+", zipDatei("+verzeichnisZip+","+zipOut+")");
byte[] buf = new byte[4096];
// Alle Dateinamen aus dem Verzeichnis werden in des Array eingelesen.
File[] fileArray = verzeichnisZip.listFiles(); String fileName = "";
// Alle Dateien auslesen.
for (int i = 0; i < fileArray.length; i++) {
// Der Name der Datei wird ermittelt.
fileName = fileArray[i].getAbsolutePath();
// Zip-Dateien ignorieren.
if (fileName.endsWith(".zip")) continue;
if (fileArray[i].isDirectory()) {
zipDatei(fileArray[i], zipOut); } else {
// Die Datei wird zum Lesen geöffnet.
FileInputStream inFile = new FileInputStream(fileName);
// Info an Zip-Datei: Jetzt kommt neuer Eintrag.
zipOut.putNextEntry(new ZipEntry(fileName)); int len;
// Der Inhalt der Datei wird in die Zip-Datei kopiert.
while ((len = inFile.read(buf)) > 0) { zipOut.write(buf, 0, len); }
inFile.close(); }
}
}
}