Hallo,
ich würde gerne ein Java-Programm schreiben um Ordner zu zippen. Jedoch bekomme ich immer die Fehlermeldung, dass der Zugriff auf den Ordner verweigert wird. Unter Eigenschaften des Ordners habe ich auch schon für alle Benutzer den Ordner freigegeben. Der neue Zip Ordner wird auch erstellt, jedoch ohne jeglichen Inhalt aus dem vorherigen Ordner.
Java:
publicstaticvoidmain(String[] args){String dst="C:\\Users\\werner\\Desktop\\Testordner.zip";String eins="C:\\Users\\werner\\Desktop\\Testordner";String[] array=newString[1];
array[0]=eins;try{byte[] buf =newbyte[4096];ZipOutputStream out =newZipOutputStream(newFileOutputStream(dst));for(int i =0; i < array.length;++i){String fname = array[i];System.out.println("adding "+ fname);FileInputStream in =newFileInputStream(fname);
out.putNextEntry(newZipEntry(fname));int len;while((len = in.read(buf))>0){
out.write(buf,0, len);}
in.close();}
out.finish();
out.close();}catch(IOException e){System.err.println(e.toString());}}
Ich meine mal gehört zu haben, dass man Directories mit ZipOutputStream nicht zippen kann.
Man muss den Ordner durchlaufen und jedes File einzeln zum zip-File hinzufügen.
Hast du mal versucht ob dein Code mit einer (bspw) einzelnen .txt-Datei funktioniert?
Ich habe nochmal einen anderen Code, bei welchem ich jedoch eine FileNotFoundException
Java:
publicstaticvoidmain(String[] args){
z.zip("C:\\Users\\werner\\Desktop\\Testordner");try{BufferedInputStream origin =null;FileOutputStream dest =newFileOutputStream("C:\\Users\\werner\\Desktop\\Testordner.zip");ZipOutputStream out =newZipOutputStream(newBufferedOutputStream(dest));//out.setMethod(ZipOutputStream.DEFLATED);byte data[]=newbyte[BUFFER];// get a list of files from current directoryFile f =newFile("C:\\Users\\werner\\Desktop\\Testordner");if(f.exists()&&!f.isDirectory()){System.out.println(" Datei exisitiert");}String files[]= f.list();for(int i=0; i< files.length; i++){System.out.println("Adding: "+files[i]);FileInputStream fi =newFileInputStream(files[i]);
origin =newBufferedInputStream(fi, BUFFER);ZipEntry entry =newZipEntry(files[i]);
out.putNextEntry(entry);int count;while((count = origin.read(data,0, BUFFER))!=-1){
out.write(data,0, count);}
origin.close();}
out.close();}catch(Exception e){
e.printStackTrace();}}
Adding: desktop.ini
java.io.FileNotFoundException: desktop.ini (Das System kann die angegebene Datei nicht finden)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Daten.Zippen.zip(Zippen.java:66)
at Daten.Zippen.main(Zippen.java:37)
Vielen Dank für deine Hilfe! Jetzt ist nur noch das Problem, dass wenn ich den Zip-Ordner öffnen möchte er sagt, dass er ungültig sei. Aber da gucke ich erstmal wie ich das beheben kann.
Vielen Dank für deine Hilfe! Jetzt ist nur noch das Problem, dass wenn ich den Zip-Ordner öffnen möchte er sagt, dass er ungültig sei. Aber da gucke ich erstmal wie ich das beheben kann.
try{BufferedInputStream origin =null;FileOutputStream dest =newFileOutputStream("C:\\Users\\werner\\Desktop\\Testordner.zip");ZipOutputStream out =newZipOutputStream(newBufferedOutputStream(dest));//out.setMethod(ZipOutputStream.DEFLATED);byte data[]=newbyte[BUFFER];// get a list of files from current directoryFile f =newFile("C:\\Users\\werner\\Desktop\\Testordner");System.out.println(f.getAbsolutePath());if(f.exists()){System.out.println("Datei exisitiert: "+ f);}File files[]= f.listFiles();for(int i=0; i< files.length; i++){System.out.println("Adding: "+files[i]);FileInputStream fi =newFileInputStream(files[i]);
origin =newBufferedInputStream(fi, BUFFER);ZipEntry entry =newZipEntry(files[i].getName());
out.putNextEntry(entry);int count;while((count = origin.read(data,0, BUFFER))!=-1){
out.write(data,0, count);}
origin.close();}
out.close();}catch(Exception e){
e.printStackTrace();}}
java.io.FileNotFoundException: C:\Users\werner\Desktop\Testordner\Subord1 (Zugriff verweigert)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Daten.Zippen.zip(Zippen.java:66)
at Daten.Zippen.main(Zippen.java:38)
Selbes Problem wie vorhin.
Du kannst keine Ordner zippen, du musst über alles Files dort drin iterieren und sie einzeln adden.
Schau mal in einen meiner ersten Posts. Dort habe ich dir ein Link geschickt wo gezeigt wird, wie man sowas Deque lösen kann.