2011-01-15 6 views
5

Я пытался несколько байт то время как методы цикла и этот метод ниже:Как скачать файл в 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(); 
} 

}

Но методы просто не очень эффективны/быстро. Я узнал об apache Utils, и я использую

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

но это лучший способ? Я сейчас так запутался, какой метод лучше всего подходит для загрузки заархивированного файла 26mb. (Файл выше всего лишь 1 мб. Я тестирую методы)

Я прошу только посмотреть, кто-то еще когда-либо сталкивался с этой проблемой и, возможно, они могли мне помочь. Благодарю.

+0

Предлагаю вам скачать файл более чем с одним потоком. Взгляните на исходный код jDownloader. – fardjad

ответ

21

Если у вас уже есть Commons IO на пути к классам использовать

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

Он заботится обо всем потоке домашнего хозяйства открытия и закрытия и призывающих mkdirs на родительский файл.

Смежные вопросы