Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    download di file zip da server

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    correggo

    scusate correggo, è 1 cartella di file zippata, non 1 file singolo.

    Grazie ancora.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    prima di
    codice:
    out.close();
    assicurati che tutto quanto in buffer sia stato effettivamente processato, ovvero aggiungi un
    codice:
    out.flush();
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    Grazie per l'aiuto. purtroppo avevo già provato.
    Ma l'archivio continua ad essere corrotto.
    ho provato anche :
    codice:
    FileOutputStream out =
        new FileOutputStream("file_out.zip");
                    byte[] readFully = IOUtils.readFully(in, 4096, true);
          int i = 0;
         while ((i = in.read(readFully)) != -1) {
    	out.write(readFully, 0, i);
    Ma nulla, continua ad aprirsi solo con winrar ( e comunque con l'avviso di archivio corrotto)
    Non credo che conti ma per completezza aggiungo che il file zip contiene un esegutivo java.

    Grazie ancora.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ho provato così:
    codice:
    try {
                BufferedInputStream bis = new BufferedInputStream((new URL(url).openStream()));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(localPath), buffSize);
                byte[] data = new byte[buffSize];
                int count;
                while ((count = bis.read(data, 0, buffSize)) != -1) {
                    bos.write(data, 0, count);
                }
                bis.close();
                bos.flush();
                bos.close();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
    dove
    url è la rappresentazione String dell'indirizzo (ho fatto le prove con http, vedo che tu usi ftp - proverò quanto prima)

    buffSize è la dimensione del buffer di lettura (4096 nel mio caso)
    localPath il percorso in locale dove salvo il file scaricato.

    Nessun problema riscontrato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    funziona !

    un mito ! grazie funziona alla perfezione.
    ti devo una pizza : )

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.