zip komprimieren

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
 
E

einszwo

Gast
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?
 
G

Guest

Gast
Code:
...
while ((len = in.read(buf)) > 0) { 
  out.write(buf, 0, len); 
}
out.closeEntry(); // <--- Das hier fehlt
 
G

Guest

Gast
Obwohl... nöö, putNextEntry(...) tut es bereits. Keine Ahnung, was da schief läuft. ???:L
 
E

einszwo

Gast
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
 
G

Guest

Gast
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.
 
G

Gast

Gast
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...
 
E

einszwo

Gast
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...
 
G

Guest

Gast
...und auf das closeEntry() kannst du doch verzichten, dies geschieht
doch bereits in putNextEntry() und finish().
 
E

einszwo

Gast
danke. werds morgen mal ausprobieren. musste vorher noch meinen zug erwischen...

mfg
 
E

einszwo

Gast
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.

Ähnliche Java Themen

Neue Themen


Oben