Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Errore I/O

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non so cosa sia Zf e one.

    Io lo semplificherei un po' comunque, dando dei nomi decenti alle variabili


    codice:
    BufferedInputStream bis = new BufferedInputStream(Zf.getInputStream(one));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(one.getName()));
    
    byte[] buffer = new byte[4 * 1024];
    int bytesRead;
    
    while ((bytesRead = bis.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
    }
    
    bos.close();
    bis.close();

    Controllare che la read restituisca qualcosa di strettamente maggiore di zero non è corretto: il valore restituito quando non c'è più nulla da leggere è -1.

    Manca inoltre la gestione delle eccezioni.
    Ultima modifica di Alex'87; 28-07-2014 a 14:47
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Non so cosa sia Zf e one.

    Io lo semplificherei un po' comunque, dando dei nomi decenti alle variabili


    codice:
    BufferedInputStream bis = new BufferedInputStream(Zf.getInputStream(one));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(one.getName()));
    
    byte[] buffer = new byte[4 * 1024];
    int bytesRead;
    
    while ((bytesRead = bis.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
    }
    
    bos.close();
    bis.close();

    Controllare che la read restituisca qualcosa di strettamente maggiore di zero non è corretto: il valore restituito quando non c'è più nulla da leggere è -1.

    Manca inoltre la gestione delle eccezioni.
    Zf è di tipo ZipFile; nel codice per definirlo avevo fatto così:
    codice:
    ZipFile Zf;
            try {Zf = new ZipFile (file);}
            catch (ZipException e) {Zf=null;}
            catch (IOException e1) {Zf=null;};
            System.out.println("Decomprimo il file "+Zf.getName());
    Invece one è la ZipEntry corrispondente al file da estrarre:
    codice:
    ZipEntry one = (ZipEntry) list.nextElement ();
    che nel codice è in un while che la definisce file per file:
    codice:
    while (list.hasMoreElements()) {}
    e
    codice:
    Enumeration list = Zf.entries();
    Per semplificare il codice mi pare tu abbia direttamente eliminato le mie variabili di InputStream e FileOutputStream e le abbia messe direttamente nello scrittore e lettore con buffer...mi abituerò

    Per quanto riguarda le eccezioni:
    codice:
    try {
    BufferedInputStream bis = new BufferedInputStream(Zf.getInputStream(one));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(one.getName()));
    
    byte[] buffer = new byte[4 * 1024];
    int bytesRead;
    
    while ((bytesRead = bis.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
    }
    
    bos.close();
    bis.close();
    }
    } catch (ZipException e) {System.out.println("Si è verificato un errore. Estrazione fallita");}
    catch (IOException e) {System.out.println("Errore di Input/Output. Estrazione fallita");};
    va bene così?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.