2011-01-15 3 views
5

Ho provato un paio di byte mentre i metodi di loop e questo metodo di seguito:come scaricare un file in java?

try { 
    URL dl = null; 
    dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip"); 
    ReadableByteChannel rbc = Channels.newChannel(dl.openStream()); 
    FileOutputStream fos = new FileOutputStream(fileName + "Screenshots.zip"); 
    fos.getChannel().transferFrom(rbc, 0, 1 << 24); 
    System.out.println(fos.getChannel().size()); 
    fos.close(); 
    rbc.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

Ma i metodi semplicemente non sono molto efficiente/veloce. Ho scoperto gli Apache Utils e sto usando

IOUtils.copy(new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip").openStream(), new FileOutputStream(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip")); 

ma è il metodo migliore? Sono così confuso in questo momento quale metodo è il migliore per scaricare un file zip 26mb. (Il file qui sopra è solo 1mb, sto testando i metodi)

Sto chiedendo solo di vedere se qualcun altro si è mai imbattuto in questo problema e forse potrebbero aiutarmi. Grazie.

+0

Ti suggerisco di scaricare il file con più di un thread. Dai un'occhiata al codice sorgente di jDownloader. – fardjad

risposta

21

Se si dispone già di Commons IO nel classpath utilizzare

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 

Si prende cura di tutto il flusso di pulizia di apertura e chiusura e mkdirs invitavano il genitore di file.