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:
Hier mein Code:
cu
luma
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