Einzelnen Beitrag anzeigen
Alt 26.03.2005, 00:06   #1 (permalink)
Luma
Stammbenutzer
Kilobyte
 
Benutzerbild von Luma
 
Registriert seit: 13.03.2004
Fachbeiträge: 216
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Zip-Archiv auslesen und Entry-Informationen auslesen

Hio. Ich entwickel gerade ein kleines Archivierprogramm. Es geht auch alles bestens nur kann ich nicht „richtig“ auf die ZipEntrys im Zip-Archiv zugreifen. D.h. ich kann schon den Namen auslesen, aber das war's dann auch schon. Muss man den das Archiv immer komplett entpacken, um auf die Dateien zuzugreifen. Ich brauche so Informationen wie z.B. das Icon der Datei oder die echte, sowie die komprimierte Größe (wenn ich zipEntry.getSize() mache kommt nämlich nur -1 zurück)...

Dann hab ich noch eine zweites Problem mit Zip-Archiven: Angenommen es liegt bereits ein Zip-Archiv auf der Festplatte. Jetzt möchte der Benutzer dieses Archiv erweitern. Den Code den ich dazu verwende funktioniert auch bestens, aber nur so lange bis ich am Level des ZipOutputStreams rumspiele... Es gibt dann nämlich immer eine ZipException die mir z.B. Sagt:
Code:
invalid entry compressed size (expected 2364329 but got 1051243 bytes)

Hier mein Code:

Code:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile));
out.setComment(this.comment);
//out.setLevel(10); //das ergibt die Exception

ArrayList<String> archiveTable = new ArrayList<String>();
			
if(inputFile.exists())
{	
	ZipFile zipFile = new ZipFile(inputFile);
	Enumeration enu = zipFile.entries();
	while(enu.hasMoreElements())
	{						
		ZipEntry ent = (ZipEntry) enu.nextElement();
		archiveTable.add(ent.getName());
		InputStream in = zipFile.getInputStream(ent);
		out.putNextEntry(ent);
		this.setCurrent("Archiviere: " + ent.getName());
		while((len = in.read(BUFFER)) > 0)
		{
			out.write(BUFFER, 0 , len);	
		}
		in.close();
		out.closeEntry();
	}
	zipFile.close();
					
}

//HashMap enthält die Dateien			
Iterator it = filesHashmap.keySet().iterator();
while (it.hasNext())
{
	String fileKey = it.next().toString();
	String filePath = filesHashmap.get(fileKey).toString();
	File file = new File(filePath);
				
	InputStream in = new FileInputStream(file);
	
	ZipEntry zipEntry = new ZipEntry(fileKey);
	out.putNextEntry(zipEntry);
	len = 0;
	while ((len = in.read(BUFFER)) > 0)
	{
		out.write(BUFFER, 0, len);
	}
	in.close();
	out.closeEntry();
					
	if(this.deletFilesOnExit)
	{
		file.delete();
	}
}
out.close();
					
inputFile.delete();
outputFile.renameTo(new File(this.archiveOutputPath));

cu
luma
Luma ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen