Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Like "Download master"


Автор: Nodir 4.7.2006, 23:01
Доброго времини дня! Есть прога скачивающий файл с URL.  Если ползователь disconnect` идся с Internet` а то он дает Exception и вылетает. Надо сделать две Button "Stop" и "Continue" чтобы по click`у сделали свои работы. И если можно после перезагрузки тоже. Искал с Inet` а нечего не нашлось. Рад в любом полезном идею.  smile  

Автор: LSD 4.7.2006, 23:07
Как именно качаешь (протокол, какую библиотеку используешь)? 

Автор: Nodir 4.7.2006, 23:22
Код
import java.net.*;
//.................
String address = "http://acm.timus.ru/file.zip";

URL flURL = new URL(address);

byte[] btBuffer = new byte[1024];

BufferedInputStream bis = new BufferedInputStream(flURL.openStream());

File aFile = new File("file.zip");

FileOutputStream out = new FileOutputStream(aFile);

int intRead;

while((intRead=bis.read(btBuffer))!= -1){
       out.write(btBuffer, 0, intRead);
}
 

Автор: kkorsakoff 5.7.2006, 11:45
Надо ввести переменную - сколько фактически байт считано. Изменяться она у тебя будет с шагом в 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();
}
  



Суть такова.
Ну и включи обработку ошибок где тебе будет удобнее. 

Автор: Nodir 8.7.2006, 11:41
Большое спасибо за совет... smile  smile  smile  

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