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;
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。