Hi
Ich habe mir eine methode gebastelt, die ein Verzeichnis durch recursion zipped. Das klappt auch wunderbar, aber dummerweise sind dann alle files mit dem entsprechendem Pfad in der zipdatei. Wenn ich das Teil wieder entpacke habe ich dann den ganze Pfad da stehen.
z.B.:
Habe ein Verzeichnis unter C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\1234
und ich will das verzeichnis 1234 (und alles da drunter) packen und die datei unter publish ablegen. Wenn ich das jetzt machen, und die datei im selben verzeichnis wieder auspacke bekomme ich das hier : C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\1234
Das ist ziemlich daneben. Hat jemand eine idee ?
Sebastian
Ich habe mir eine methode gebastelt, die ein Verzeichnis durch recursion zipped. Das klappt auch wunderbar, aber dummerweise sind dann alle files mit dem entsprechendem Pfad in der zipdatei. Wenn ich das Teil wieder entpacke habe ich dann den ganze Pfad da stehen.
z.B.:
Habe ein Verzeichnis unter C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\1234
und ich will das verzeichnis 1234 (und alles da drunter) packen und die datei unter publish ablegen. Wenn ich das jetzt machen, und die datei im selben verzeichnis wieder auspacke bekomme ich das hier : C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\C:\Arbeitsverzeichnis\sonstiges\nochwas\publish\1234
Das ist ziemlich daneben. Hat jemand eine idee ?
Code:
public static void zipDir (String folder, String zipfile) {
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipfile));
compressFolder(folder, zos);
zos.close();
} catch (Exception e) {
}
}
// here is the recursive method
public static void compressFolder (
String folder,
ZipOutputStream zos
) {
try {
File zipDir = new File(folder);
String[] dirList = zipDir.list();
byte[] readBuffer = new byte[2156];
int bytesIn = 0;
//loop through dirList, and zip the files
for (int i = 0; i < dirList.length; i++) {
File f = new File(zipDir, dirList[i]);
if (f.isDirectory()) {
String filePath = f.getPath();
compressFolder(filePath, zos);
continue;
}
FileInputStream fis = new FileInputStream(f);
ZipEntry anEntry = new ZipEntry(f.getPath());
zos.putNextEntry(anEntry);
while ((bytesIn = fis.read(readBuffer)) != -1) {
zos.write(readBuffer, 0, bytesIn);
}
fis.close();
}
} catch (Exception e) {
}
}
Sebastian