ciao a tutti, ho un problemino.
Una semplice applicazione che scarica un file zip da un server ftp, e lo scompatta.
La parte che scarica mi da file corrotti, ma che manualmente si riescono ad aprire.
errore WINRAR:
! C:\Programmi\Java\classi_NBean\downloader\file_out .zip: The archive is corrupt

L parte che scompatta, funziona su file di prova, ma non riesce ad aprire quelli semicorrotti scaricati, errore :
Unhandled exception:
java.util.zip.ZipException: invalid END header (bad central directory offset)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:114)
at java.util.zip.ZipFile.<init>(ZipFile.java:75) ... etc..


Codice per scaricare zip
codice:
public class ThreadloadFileSream3 extends Thread{
public ThreadloadFileSream3 (){
}
@Override
public void run() {

try
{
    URL url =
    new URL("ftp://utente:password@server/directory/file.zip;type=i");
    URLConnection con = url.openConnection();
    BufferedInputStream in =
    new BufferedInputStream(con.getInputStream());
    FileOutputStream out =
    new FileOutputStream("file_out.zip");
    lung=in.read();
    System.out.println("lung="+lung);
    int i = 0;
    byte[] bytesIn = new byte[1024];
    System.out.println("leggi zip");

while ((i = in.read(bytesIn)) != -1) {
    out.write(bytesIn, 0, i);
}

    out.close();
    in.close();
    jLabel2.setText("installazione completata");
    System.out.println("fine stream");
    }
    catch( Exception e )
    {
    }
}
}
Codice per scompattare zip

codice:
public static final void unZip2() {
        Enumeration entries;
        ZipFile zipFile;
        String zip =("file_out.zip");
    try {
        zipFile = new ZipFile(zip);
        entries = zipFile.entries();
    while(entries.hasMoreElements()) {
        ZipEntry entry = (ZipEntry)entries.nextElement();
    if(entry.isDirectory()) {
        System.err.println("Extracting directory: " + entry.getName());
        (new File(entry.getName())).mkdir();
        continue;
    }
        System.err.println("Extracting file: " + entry.getName());
        copyInputStream(zipFile.getInputStream(entry),
        new BufferedOutputStream(new FileOutputStream(entry.getName())));
    }
        zipFile.close();
        } catch (IOException ioe) {
        System.err.println("Unhandled exception:");
        ioe.printStackTrace();
        return;
        }
        }
Grazie per l'aiuto.