Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Докачка файлов


Автор: LSD 6.7.2006, 20:59
Часто возникает задача, скачать файл с произвольной позиции. Например при разрыве позиции, продолжить скачивание с места разрыва, или скачивать файл в несколько потоков.

Простейший пример как реализовать скачивание, с возможностью остановки и продолжения:

Надо ввести переменную - сколько фактически байт считано. Изменяться она у будет с шагом в 1024 (размер буфера), инкремент производится после вызова out.write() - так надежнее (мало ли в файл не записалось).

При нажатии стоп - просто прекращается даунлоад. Можно ввести флаг boolean doStop и проверять его значение перед каждой итерацией в условии while.

При нажатии старт начинается даунлоад. Нам нужно устанавливать свои HTTP-заголовки. Можно использовать или HttpUrlConnection или HttpClient.

Пойдем по простому пути
Код
private int readBytes=0;
private boolean doStop=false;

private void download() throws IOException{
    HttpURLConnection conn=(HttpURLConnection)flURL.openConnection();
    conn.setRequestProperty("Range", "bytes="+readBytes+"-");
    // readBytes - кол-во считанных байтов. Сервер начнет передачу начиная с readBytes-байта включительно.

    while(!doStop && (intRead=bis.read(btBuffer))!= -1){
           out.write(btBuffer, 0, intRead);
           readBytes=readBytes+intRead;
    }
    ...
    conn.disconnect();
}

private void stopDownload(){
    doStop=true;
}

private void startDownload(){
    doStop=false;
    download();
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)