zip komprimieren

  • Themenstarter Themenstarter einszwo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

einszwo

Gast
hallo.

versuche grad erst allgemein dateien mittels zip zu komprimieren. hab aber leider noch anfängerprobleme...
hab eigendlich auch schon einen fertigen programmteil der aber leider nicht funktioniert. erstellt zwar eine zip-datei aber die "eins.txt" und "zwei.txt" sind darin nicht enthalten...

Code:
public class Test
 {
   public static void main(String[] args)
   {
	   String dst="C:\\test.zip";
	   String eins="C:\\eins.txt";
	   String zwei="C:\\zwei.txt";
	   String[] array=new String[1];
	   array[0]=eins;
	   array[1]=zwei;
     
     try {
       byte[] buf = new byte[4096];
       ZipOutputStream out = new ZipOutputStream(
                             new FileOutputStream(dst));
       for (int i = 0; i < array.length; ++i) {
         String fname = array[i];
         System.out.println("adding " + fname);
         FileInputStream in = new FileInputStream(fname);
         out.putNextEntry(new ZipEntry(fname));
         int len;
         while ((len = in.read(buf)) > 0) {
           out.write(buf, 0, len);
         }
         in.close();
       }
       out.close();
     } catch (IOException e) {
       System.err.println(e.toString());
    }
   }

wäre über jeden tipp erfreut 🙂

mfg
 
hmmm hab ich mir auch gedacht. läuft aber nich 🙁
wie gesagt, die beiden dateien existieren, aber nachm durchlauf sind se nich im zip-ordner...

irgendeine ahnung?
 
Code:
...
while ((len = in.read(buf)) > 0) { 
  out.write(buf, 0, len); 
}
out.closeEntry(); // <--- Das hier fehlt
 
Obwohl... nöö, putNextEntry(...) tut es bereits. Keine Ahnung, was da schief läuft. ???:L
 
danke für den tipp.
hilft mir aber grad auch nich weiter.
soll ich des vorhandene out.close in out.closeEntry() erweitern?
dann kann ich die erstellte zip nicht mehr öffnen 🙁

und wenn ich des out.closeEntry() nach der } klammer zusätzlich schreib, hauts auch nich hin. is die zip-datei wieder leer...

mfg
 
Ich habe in den Code von ZipOutputStream geschaut, ZipOutputStream#close()
schliesst nicht den letzten Eintrag. Vielleicht ist dies die Ursache.
Also doch ZipOutputStream#closeEntry() und am Ende ZipOutputStream#finish()
aufrufen, da dies auch nicht in close() geschieht.
 
hast du des evtl selber mal bei dir getestet?
vielleicht spinnt mein "praktikums-laptop" mal wieder. 🙂

is scho öfter vorgekommen dass nix funktioniert hat und daheim auf meinem eigenen pc schon...
 
also hier nochmal der code:

Code:
import java.io.*;
import java.util.zip.*;
 
 public class Test
 {
   public static void main(String[] args)
   {
	   String dst="C:\\bla.zip";
	   String eins="C:\\eins.txt";
	   String zwei="C:\\zwei.txt";
	   String[] array=new String[2];
	   array[0]=eins;
	   array[1]=zwei;
     
     try {
       byte[] buf = new byte[4096];
       ZipOutputStream out = new ZipOutputStream(
                             new FileOutputStream(dst));
       for (int i = 0; i < array.length; ++i) {
         String fname = array[i];
         System.out.println("adding " + fname);
         FileInputStream in = new FileInputStream(fname);
         out.putNextEntry(new ZipEntry(fname));
         int len;
         while ((len = in.read(buf)) > 0) {
           out.write(buf, 0, len);
         }
         out.closeEntry();
         in.close();
       }
       out.close();
       out.finish();// <- "java.io.IOException: Stream closed" obwohl ganz am ende?
        } catch (IOException e) {
       System.err.println(e.toString());
    }
   }
}

aber mit out.finish() kommt die Exception...
 
...und auf das closeEntry() kannst du doch verzichten, dies geschieht
doch bereits in putNextEntry() und finish().
 
danke. werds morgen mal ausprobieren. musste vorher noch meinen zug erwischen...

mfg
 
habs jetz daheim gleich mal getestet. jetzt funktionierts. bis auf ein kleines problem: wenn ich die zip manuell entzippen will, verlangt er ein passwort?!
hat des schon mal jemand ghabt?

mfg
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben