2011-01-15 25 views
5

Ben döngü yöntemlerine iken birkaç byte ve aşağıdaki bu yöntemi denedim:Java'da bir dosyayı nasıl indirebilirim?

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(); 
} 

}

Ama yöntemler sadece hızlı/çok verimli değildir. Ben apache Utils öğrendim ve ben

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

kullanarak ama en iyi yöntem olmasıdır ediyorum? Şimdiye kadar kafam çok karışıktır, zikzaklı bir dosya 26mb'yi indirmek için en uygun yöntem hangisidir. (Yukarıdaki dosya sadece 1mb'dir. Yöntemleri test ediyorum)

Sadece bir başkasının bu problemle karşılaşıp karşılaşmadığını görmek istiyorum ve belki bana yardım edebilirler. Teşekkürler.

+0

Dosyayı birden fazla iş parçacığı ile indirmenizi öneriyorum. JDownloader kaynak koduna bir göz atın. – fardjad

cevap

21

zaten üzerinde sınıf Commons GÇ kullanmak varsa

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

Bu Dosya ebeveyn üzerinde açılış ve kapanış ve arama mkdirs tüm akışı temizlik ilgilenir.

İlgili konular