Zip/Unzip - Size er altid -1 på zipentry
Jeg har en applikation som på et tidspunkt laver en zip fil, for måske senere at skulle unzippe den og vise hvad der findes inde i den. Den skal f.eks. også vise hvor stor det enkelte entry er inde i zip-filen.Mit problem er, at ligegyldigt hvordan jeg prøver at zippe, så bliver størrelsen af mit zip-entry altid -1 når jeg læser igen. Det forstår jeg ikke, for selve indholdet, hvis jeg pakker det ud, virker som det skal.
Hvad gør jeg forkert? Se nedenstående kode:
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public static void main(String[] args) throws IOException {
try {
String outputFile = "c:\\a.zip";
int level = 9;
FileOutputStream fout = new FileOutputStream(outputFile);
ZipOutputStream zout = new ZipOutputStream(fout);
zout.setLevel(level);
ZipEntry ze = new ZipEntry("a.zip");
File f = new File("c:\\temp\\splash.gif");
ze.setSize(f.length());
FileInputStream fin = new FileInputStream(f);
zout.putNextEntry(ze);
for (int c = fin.read(); c != -1; c = fin.read()) {
zout.write(c);
}
fin.close();
zout.close();
File f1 = new File("c:\\a.zip");
System.out.println("size: " + f1.length());
testinput();
}
catch (Exception e) {
System.out.println(e);
}
}
private static void testinput() throws Exception {
FileInputStream fin = new FileInputStream("C:\\a.zip");
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
System.out.println("Unzipping " + ze.getName() + " - " + ze.getSize());
FileOutputStream fout = new FileOutputStream(ze.getName());
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
zin.closeEntry();
fout.close();
}
zin.close();
}