Hi Leute,
ich hab mir ein kleines Programm geschrieben, dass mir einen Ordner den ich angebe komprimiert in eine ZIP-Datei.
Das funktioniert auch, doch das Problem hierbei ist, dass manche Ordner ein Leerzeichen enthalten und beim ZIP-Vorgang dieses Leerzeichen durch %20 ersetzt wird. Sprich aus dem Ordner "Program Files" wird "Program%20Files". Dies will ich aber vermeiden. Ist da was an meiner Methode falsch oder hat jemand eine andere Idee an was das liegen könnte?
Im Ordner "Dateien" sind jetzt die genannten Order wie z.B. "Neuer Ordner" oder "Program Files" usw. und es ist nicht gewollt dass diese umbenannt werden. Diese sollen so bleiben wie sie sind.
Hoffe ihr könnt mir helfen
ich hab mir ein kleines Programm geschrieben, dass mir einen Ordner den ich angebe komprimiert in eine ZIP-Datei.
Das funktioniert auch, doch das Problem hierbei ist, dass manche Ordner ein Leerzeichen enthalten und beim ZIP-Vorgang dieses Leerzeichen durch %20 ersetzt wird. Sprich aus dem Ordner "Program Files" wird "Program%20Files". Dies will ich aber vermeiden. Ist da was an meiner Methode falsch oder hat jemand eine andere Idee an was das liegen könnte?
Code:
public static void main(String[] args) {
System.out.println("Erstelle ZIP-Archiv...");
ZipOutputStream zipOut;
zipOut = new ZipOutputStream(new FileOutputStream("C:\\Users\\oloesch\\Archiv.zip"));
ZipOperation zip = new ZipOperation(zipOut, new File("C:\\Users\\oloesch\\Dateien"));
zip.zipIt();
zipOut.close();
System.out.println("ZIP-File wurde gespeichert!");
}
Im Ordner "Dateien" sind jetzt die genannten Order wie z.B. "Neuer Ordner" oder "Program Files" usw. und es ist nicht gewollt dass diese umbenannt werden. Diese sollen so bleiben wie sie sind.
Code:
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipOperation {
private static byte[] buffer = new byte[8192];
private static int len = 0;
private ZipOutputStream zipOut;
private File file;
//Konstruktor
public ZipOperation(ZipOutputStream zipOut, File file) {
this.zipOut = zipOut;
this.file = file;
}
//Add to Zip-Archiv
public void zipIt() throws Exception {
treeWalkAndCompressTo(file, file.getParentFile().toURI(), zipOut);
zipOut.close();
}
private static void treeWalkAndCompressTo(File file, URI relateTo, ZipOutputStream zipOut) throws Exception {
zipOut.setLevel(9);
if (!file.isDirectory()) {
URI relativePath = relateTo.relativize(file.toURI());
ZipEntry entry = new ZipEntry(relativePath.toString());
zipOut.putNextEntry(entry);
FileInputStream fis = new FileInputStream(file);
while ((len = fis.read(buffer)) > 0) {
zipOut.write(buffer, 0, len);
}
fis.close();
zipOut.closeEntry();
} else {
File[] children = file.listFiles();
for (int i = 0; i < children.length; i++) {
File child = children[i];
treeWalkAndCompressTo(child, relateTo, zipOut);
}
}
}
}
Hoffe ihr könnt mir helfen
