/*
** 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.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import filius.Main;
public class LadeZipDatei {
public void extrahierenArchiv(File archiv, File zielDir) throws Exception {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+", extrahiereArchiv("+archiv+","+zielDir+")");
if (!zielDir.exists()) {
zielDir.mkdir();
}
ZipFile zipFile = new ZipFile(archiv);
Enumeration eingaenge = zipFile.entries();
byte[] buffer = new byte[16384];
int laenge;
while (eingaenge.hasMoreElements()) {
ZipEntry eingang = (ZipEntry) eingaenge.nextElement();
String eingangFileName = eingang.getName();
File verzeichnis = baueVerzeichnisHierarchieFuer(eingangFileName, zielDir);
if (!verzeichnis.exists()) {
verzeichnis.mkdirs();
}
if (!eingang.isDirectory()) {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(zielDir, eingangFileName)));
BufferedInputStream bis = new BufferedInputStream(zipFile
.getInputStream(eingang));
while ((laenge = bis.read(buffer)) > 0) {
bos.write(buffer, 0, laenge);
}
bos.flush();
bos.close();
bis.close();
}
}
}
private File baueVerzeichnisHierarchieFuer(String eingangName, File zielDir) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+", baueVerzeichnisHierarchieFuer("+eingangName+","+zielDir+")");
int lastIndex = eingangName.lastIndexOf('/');
String internalPathToEntry = eingangName.substring(0, lastIndex + 1);
return new File(zielDir, internalPathToEntry);
}
}