PDA

Visualizza la versione completa : JAVA: visualizzare % scaricamento file


patrix.999
28-08-2003, 21:13
Vi spiego brevemente il mio problema. :bhò:
Sto creando un'applicazione peer2peer, e quando scarico un file devo poter visualizzare dinamicamente la percentuale scaricata o i byte scaricati, come avviene quando si fa il download di un file con IE o WinMX ecc...
Devo usare RMI per creare il progetto.
Accetto qualsiasi consiglio!
Grazie :)
Patrik

pireda
29-08-2003, 09:47
Io l'ho gia fatto utilizzando una JProgress bar che viene aggiornata ogni secondo (tramite un timer). Naturalmente sto dando per scontato che tu sia gia in grado di sapere i KB totali e quelli scaricati...
Se hai bisogno chiedi pure. :sexpulp:

patrix.999
29-08-2003, 09:58
Per sapere i KB totali non ci sono problemi, però se mi spiegassi come vedere quelli scaricati te ne sarei grato... :master:
Grazie

pireda
29-08-2003, 10:00
Come effettui il download? Ti sei scaricato dal web un package apposta o hai creato tu tutte le routines?

patrix.999
29-08-2003, 10:09
Uso un metodo che ho trovato sul sito della Sun, ti scrivo il codice:

//codice per salvare il file nel client richiedente
byte[] buffer = scarica.downloadFile("nomeDelFile");
BufferedOutputStream output = new BufferedOutputStream(newFileOutputStream(directory + "nomeDelFile");
output.write(buffer, 0, buffer.length);
output.flush();
output.close();

//codice per inviare il file al client richiedente
BufferedInputStream input = new BufferedInputStream(newFileInputStream("nomeFile"));
int dim=input.available();
byte buffer[]=new byte[dim];
input.read(buffer,0,buffer.length);
input.close();
return buffer;

in pratica mi viene ritornato il file sotto forma di array di byte e io lo salvo poi in un file vero e proprio.
Che codice hai usato tu per fare ciò?

pireda
29-08-2003, 10:27
Io avevo trovato un package FTP sul web che ti mette a disposizione dei metodi gia pronti per il trasferimento file remoto. Comunque, prova a cambiare il tuo codice così:



BufferedOutputStream out =
new BufferedOutputStream(
new FileOutputStream(directory + "nomeDelFile", false));

BufferedInputStream in =
new BufferedInputStream(
new FileInputStream("nomeDelFile"));

long size = 0;
int chunksize = 4096;
byte [] chunk = new byte[chunksize];
count; //Questa variabile dovrà essere leggibile dal timer

try {
while ((count = in.read(chunk, 0, chunksize)) >= 0) {
out.write(chunk, 0, count);
size += count;
}
}
catch (IOException ex) {
storedEx = ex;
localFile.delete();
}
finally {
out.close();
}

try {
in.close();
data.close();
}
catch (IOException ignore) {}


A questo punto ti crei un timer, ogni volta che il timer trascorre il tempo che gli hai impostato, leggi la variabile count che contiene il numero di bytes trasferiti.

P.S. Non sono sicuro che funzioni, te l'ho detto, io usavo un altro package, al massimo se vuoi te lo invio per posta!

pireda
29-08-2003, 10:29
Ops... Scusa, è la variabile size che devi andare a leggere, non count!

patrix.999
29-08-2003, 10:32
Mi sarebbe molto utile se mi inviassi il package di cui parli per posta! Intanto studio il codice che mi hai scritto sopra!
Grazie x l'aiuto!

pireda
29-08-2003, 10:42
Indirizzo?

Angelo1974
29-08-2003, 11:00
Ciao Pireda, scusami se mi intrometto :) , ma mi sarebbe molto utile il package che hai utilizzato, se ti è possibile potresti inviarmelo? questo è il mio indirizzo e-mail (angeloimm1974@hotmail.com) ; se me lo invii mi faresti un grosso favore; grazie ed a buon rendere :p , ciaooooo :ciauz:

Loading