Salve
Mi sto appena affacciando al mondo di java.
In questo momento, sto creando un'applicazione a console, che cerca il file.zip passato come argomento, ne elenca i file e li estrae.
Il codice è:
codice:
import java.util.*;
import java.util.zip.*;
import java.io.*;

class extract {
    public static void main (String [] f) throws IOException {
        ZipFile Zf;
        try {Zf= new ZipFile (f[0]);}
        catch (ZipException e) {Zf=null;}
        catch (IOException e1) {Zf=null;};
        System.out.println("Decomprimo "+Zf.getName());

        Enumeration files = Zf.entries();
        while(files.hasMoreElements ()) {
            ZipEntry one = (ZipEntry) files.nextElement();
            System.out.println ("Estraggo "+one+" da "+Zf.getName());
            System.out.println("Dimensione compresso: "+one.getCompressedSize());
            System.out.println("Dimensione non compresso: "+one.getSize());
            System.out.println("CRC: "+one.getCrc());
            System.out.println("Modificato in data: "+one.getTime());
            
            InputStream in = Zf.getInputStream(one);
            FileOutputStream out= new FileOutputStream(one.getName());

            for (int ch=in.read();ch!=-1;ch=in.read()) {
                out.write(ch);
                out.close();
                in.close();
            }
        }
    }
}
A parte il fatto che non riesco a capire le condizione dell'ultimo ciclo for (l'ho preso da una guida ), ho un errore di input/output su ogni zip che decido di estrarre. Tutto il resto dello script funziona (elenca i files, le dimensioni compresso e non, e il CRC), ma l'estrazione fallisce. Per completezza riporto l'output:
Exception in thread "main" java.io.IOException: Stream closed
at java.util.zip.InflaterInputStream.ensureOpen(Unkno wn Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at extract.main(extract.java:25)
Qualcuno sa spiegare cosa sto sbagliando?