java实现适用于安卓的文件下载线程类
代码非常简单实用,这里就不多废话了,直接奉上源码
packageandroid.mooc.tools; importjava.io.BufferedInputStream; importjava.io.File; importjava.io.RandomAccessFile; importjava.net.URL; importjava.net.URLConnection; importandroid.util.Log; publicclassFileDownloadThreadextendsThread{ privatestaticfinalintBUFFER_SIZE=1024; privateURLurl; privateFilefile; privateintstartPosition; privateintendPosition; privateintcurPosition; //用于标识当前线程是否下载完成 privatebooleanfinished=false; privateintdownloadSize; privatebooleanstate; booleandestory; publicbooleanisDestory(){ returndestory; } publicvoidsetDestory(booleandestory){ this.destory=destory; } publicFileDownloadThread(URLurl,Filefile,intstartPosition,intendPosition){ this.url=url; this.file=file; this.startPosition=startPosition; this.curPosition=startPosition; this.endPosition=endPosition; this.downloadSize=0; } @Override publicvoidrun(){ destory=false; state=true; BufferedInputStreambis=null; RandomAccessFilefos=null; byte[]buf=newbyte[BUFFER_SIZE]; URLConnectioncon=null; try{ con=url.openConnection(); con.setAllowUserInteraction(true); //设置当前线程下载的起点,终点 con.setRequestProperty("Range","bytes="+startPosition+"-"+endPosition); con.setRequestProperty("accept","*/*"); con.setRequestProperty("connection","Keep-Alive"); con.setRequestProperty("Accept-Language","zh-CN"); con.setRequestProperty("Charset","UTF-8"); con.setRequestProperty("User-Agent", "Mozilla/4.0(compatible;MSIE8.0;WindowsNT5.2;Trident/4.0;.NETCLR1.1.4322;" +".NETCLR2.0.50727;.NETCLR3.0.04506.30;.NETCLR3.0.4506.2152;.NETCLR3.5.30729)"); //使用java中的RandomAccessFile对文件进行随机读写操作 fos=newRandomAccessFile(file,"rw"); //设置开始写文件的位置 fos.seek(startPosition); bis=newBufferedInputStream(con.getInputStream()); //开始循环以流的形式读写文件 while((curPosition<endPosition)&&(!destory)){ while(state==false){ sleep(2000); } intlen=bis.read(buf,0,BUFFER_SIZE); if(len!=-1){ fos.write(buf,0,len); curPosition=curPosition+len; if(curPosition>endPosition){ downloadSize+=len-(curPosition-endPosition); }else{ downloadSize+=len; } } Log.i("333","run"+"len="+len); } //下载完成设为true this.finished=true; bis.close(); fos.close(); }catch(Exceptione){ e.printStackTrace(); } } publicbooleanisState(){ returnstate; } publicvoidsetState(booleanstate){ this.state=state; } publicbooleanisFinished(){ returnfinished; } publicintgetDownloadSize(){ returndownloadSize; } publicvoidsetDownloadSize(intdownloadSize){ this.downloadSize=downloadSize; } }
以上所述就是本文的全部内容了,希望大家能够喜欢。