1Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
3007
3007
EMPFEHLEN
-
Hallo,
ich habe ein Zip-Programm geschrieben.
Beim erstellen eines Zip-Archives kann man sich das Kompressionslevel auswählen. Wenn ich jetzt Dateien einem Archiv hinzufügen möchte, brauche ich das gleiche Kompressionslevel, wie beim Erstellen des Archivs, da das Programm sonst ne Exception auswirft. Ich weiß aber nicht wie ich rausbekommen soll mit welchem Kompressionslevel das Archiv komprimiert wurde.
Kann mir bitte einer helfen oder hat jemand eine andere IdeeGeändert von zerix (31.05.05 um 20:31 Uhr)
-
31.05.05 22:38 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo!
Schau mal hier:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
/** * */ package de.tutorials; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** * @author Tom * */ public class ZipFileExample { /** * @param args */ public static void main(String[] args) throws Exception { File archiveFile = new File("e:/foo.zip"); File file = new File("e:/tmp/bar.txt"); addFileToArchive(file, archiveFile); } public static void addFileToArchive(File file, File archiveFile) throws Exception { File tmpFile = new File(String.valueOf(System.currentTimeMillis())); ZipFile zipSrc = new ZipFile(archiveFile); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tmpFile)); Enumeration srcEntries = zipSrc.entries(); while (srcEntries.hasMoreElements()) { ZipEntry entry = (ZipEntry) srcEntries.nextElement(); zos.putNextEntry(entry); BufferedInputStream bis = new BufferedInputStream(zipSrc .getInputStream(entry)); while (bis.available() > 0) { zos.write(bis.read()); } zos.closeEntry(); bis.close(); } ZipEntry newEntry = new ZipEntry(file.getName()); zos.putNextEntry(newEntry); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); while (bis.available() > 0) { zos.write(bis.read()); } zos.closeEntry(); zos.finish(); zos.close(); zipSrc.close(); archiveFile.delete(); tmpFile.renameTo(archiveFile); } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Da kommt leider der gleiche Fehler. Soweit ich erkenne ist das fast der gleiche Quelltext wie meiner, bis auf den BufferedInputStream, da hab ich nur nen InputStream
Exception in thread "main" java.util.zip.ZipException: invalid entry compressed size (expected 1318 but got 1316 bytes)
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
at ZipFileExample.addFileToArchive(ZipFileExample.java:46)
at ZipFileExample.main(ZipFileExample.java:23)
Ich weiß, es an unterschiedlichen Kompressionsraten liegt, aber ich weiß nicht wie ich raus bekommen soll, mit welcher Kompressionsrate ein Archiv komprimiert wurde. Oder geht das auch anders?
-
31.05.05 23:20 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo!
Also bei mir funktionierts... unter Windows XP. Wenn ich mit Winzip 8.1 eine Datei mit maximaler Kompressionsrate packe und mit meinem Beispiel eine Textdatei hinzufüge klappt's einwandfrei.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Ich hab es gerade mal mit einer Evaluations Version von WinZip 9.0 und mit meinem Prog probiert und ich bekomme jedesmal den gleichen Fehler.
Ich benutze auch Windows XP.
Ich hab das ganze auch schon auf einem anderen Rechner probiert und da kommt auch der gleiche Fehler und viel falsch machen kann man da ja nicht.
Trotzdem danke für deine Hilfe
-
31.05.05 23:54 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo!
Ich hab das Beispiel nun mal mit Winzip 9.0 ausprobiert und es läuft einwandfrei durch...
Ich erzeuge mit Winzip eine Archiv mit einer 2 kbyte großen Textdatei. Die Kompressionsrate setze ich dabei auf Maximum (portable). Anschließend füge ich über den Beispielcode eine 1 kbyte große Datei hinzu.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Klar, bei TXT oder ähnlichen Dateien ist es fast egal wie hoch die Kompressionrate eingestellt ist, weil sich da bei der kompression fast nie was ändert. Versuch es mal mit mehreren verschiedenen Dateien.
-
01.06.05 18:26 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo!
Habs jetzt mal mit einem 36 MB jpeg Image versucht (liegt im foo.zip) und eine exe Datei hinzugefügt.
Funktioniert jetzt einwandfrei
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
/** * */ package de.tutorials; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** * @author Tom * */ public class ZipFileExample { /** * @param args */ public static void main(String[] args) throws Exception { File archiveFile = new File("e:/foo.zip"); File file = new File("c:/tmp/Firefox Setup 1.0.3.exe"); addFileToArchive(file, archiveFile); } public static void addFileToArchive(File file, File archiveFile) throws Exception { File tmpFile = new File(String.valueOf(System.currentTimeMillis())); ZipFile zipSrc = new ZipFile(archiveFile); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tmpFile)); byte[] buffer = new byte[32756]; int len = 0; Enumeration srcEntries = zipSrc.entries(); while (srcEntries.hasMoreElements()) { ZipEntry entry = (ZipEntry) srcEntries.nextElement(); ZipEntry newEntry = new ZipEntry(entry.getName()); zos.putNextEntry(newEntry); InputStream is = zipSrc.getInputStream(entry); while ((len = is.read(buffer)) > 0) { zos.write(buffer, 0, len); } zos.flush(); is.close(); } ZipEntry newEntry = new ZipEntry(file.getName()); zos.putNextEntry(newEntry); InputStream is = new FileInputStream(file); long size = 0; while ((len = is.read(buffer)) > 0) { zos.write(buffer, 0, len); } zos.closeEntry(); zos.finish(); zos.close(); zipSrc.close(); archiveFile.delete(); tmpFile.renameTo(archiveFile); } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Geil, es funktioniert.
Könnteste mir bitte noch erklären woran es gelegen hat
-
01.06.05 19:39 #10
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo!
Man muss einfach einen neuen ZipEntry erzeugen, der so heißt wie der alte ...
Dabei darf man jedoch nicht die Werte für size und compressedSize übernehmen, da diese scheinbar neu berechnet werden und dann leicht von den vorherigen abweichen können.Code :1 2
ZipEntry newEntry = new ZipEntry(entry.getName()); zos.putNextEntry(newEntry);
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Ok, danke.
Auf die Idee hätte ich auch mal kommen können
Ich mach jetzt noch nen neuen Beitrag, vielleicht kannste mir da auch helfen
Ähnliche Themen
-
Daten in Dateien löschen bzw. hinzufügen
Von thekiller im Forum C/C++Antworten: 7Letzter Beitrag: 24.01.11, 12:08 -
Dateien dem Projekt hinzufügen
Von Meronax im Forum .NET CaféAntworten: 2Letzter Beitrag: 17.03.09, 08:19 -
jar-Archiv Dateien einbinden
Von The_Answer1985 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 01.10.07, 11:12 -
Jar Archiv nach Manifest Dateien durchsuchen
Von cHrIzMaStEr im Forum JavaAntworten: 8Letzter Beitrag: 24.10.06, 16:40 -
Gebrannten DvD Dateien hinzufügen
Von Doofkatze im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 19.12.05, 16:45






Zitieren

Login




