
Originariamente inviata da
Alex'87
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ì?