Input/Output Mit Windows 7 erzeugtes zip-File in Java 7 öffnen

  • Themenstarter Themenstarter nillehammer
  • Beginndatum Beginndatum
N

nillehammer

Gast
Moin Forum,
ich habe wie folgt mit Windows 7 ein zip-File erzeugt:
- Im Datei-Explorer Rechte Maustaste -> Neu -> Zip komprimierter Ordner
- Mit Drag&Drop Textdateien reingeschoben

Dieses Zip wollte ich jetzt in Java 7 öffnen:
Java:
final File file = new File("C:/my.zip");

final ZipFile zipFile = new ZipFile(file);
		
/*
 * Habe erst gedacht, es könnte am Windows-Charset liegen.
 * Habe darum auch folgendes ausprobiert.
 * Geht aber auch nicht
 */
//final ZipFile zipFile = new ZipFile(file, Charset.defaultCharset());
Ich bekomme in Zeile 3 (in meinem kompletten Quellcode Zeile 20) direkt eine Exception:
Code:
Exception in thread "main" java.util.zip.ZipException: invalid CEN header (bad compression method)
	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(ZipFile.java:214)
	at java.util.zip.ZipFile.<init>(ZipFile.java:144)
	at java.util.zip.ZipFile.<init>(ZipFile.java:158)
             at App.main(App.java:20)
Danach habe ich mal gegoogelt. Finde aber nur zwei Bug-Meldungen zu Java 1.4 und 1.5. Was läuft denn da schief? Soo ausgefallen sind mein UseCase und mein Code ja nun nicht.
 
So, habe weiter gesucht und das hier gefunden: Compressing and Decompressing Data Using Java
Dort wird statt mit ZipFile mit ZipInputStream gearbeitet. Da ich auch das benutzen kann, habe ich meinen Code umgeschrieben:
Java:
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		final String fileName = "C:/my.zip";

		final ZipInputStream zipIs = new ZipInputStream(
				new BufferedInputStream(new FileInputStream(fileName)));

		ZipEntry currentEntry;
		while ((currentEntry = zipIs.getNextEntry()) != null) {

			System.out.println("*** " + currentEntry.getName());
		}

	}
Jetzt öffnet er wenigstens den Stream und in der while-Schleife zeigt er mir sogar den Namen des ersten Entrys an, aber auch dann wieder Exception:
Code:
Exception in thread "main" java.util.zip.ZipException: invalid compression method
	at java.util.zip.ZipInputStream.read(ZipInputStream.java:224)
	at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:139)
	at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:117)
	at App.main(App.java:22)
Erzeugt Windoof denn tasächlich Zips mit einer compression method, die Java nicht kann ?!?
 
Kann ich nicht bestätigen, dein Code funktioniert bei mir.

Die Zip Datei habe ich so erzeugt:
- Rechte Maustaste auf ne txt-Datei
-> Senden an
-> ZIP komprimierter Ordner

Code:
Windows 7 Professional

Code:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
 
Hallo EikeB,
danke fürs Testen. Meine Umgebung ist
Code:
Windows 7 Enterprise
Code:
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
Mit Senden an -> ZIP komprimierter Ordner geht's auch nicht.

Habe mir mit ZipEntry.getMethod() die verwendete compression Method des ersten Entrys anzeigen lassen, Ergebnis ist 9. Das ist laut Spezifikation (http://www.pkware.com/documents/casestudies/APPNOTE.TXT) Deflated. Für diese Method gibt es in Java wiederrum die Konstante 8. Deswegen fliegt die Exception. Habe aber keine Ahnung, wie die 9 zustande kommt. Ich installier mir jetzt mal ein richtiges Zip-Programm und arbeite damit weiter.
 
Zuletzt bearbeitet von einem Moderator:
So, die gleichen Daten mit 7zip gepackt. Compression-Method ist jetzt 8. Java ist zufrieden. Entweder ist Windows 7 Enterprise beknackt, oder unsere Admins haben irgendwas in der Registry verbogen, sodass Windows Method 9 benutzt. Egal...
 
Sorry ... aber ich kann das Problem nicht nachvollziehen :

Java:
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class ZipRead
{
	public static void main(String[] args) throws Exception
	{
		ZipFile zip=new ZipFile("test.zip");
		Enumeration<? extends ZipEntry> entries=zip.entries();
		while(entries.hasMoreElements())
		{
			ZipEntry entry=entries.nextElement();
			System.out.println(entry.getName());
		}
	}
}

Windows 7 Ultimate x64

Code:
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

Zip-File mit "Rechtsklick -> Senden an -> ZIP" erstellt.

Konnte es mit Java ohne probleme lesen. Denke mal bei euch wird was "verstellt" sein.
 

Neue Themen


Zurück
Oben