首页 > 编程 > Java > 正文

java实现适用于安卓的文件下载线程类

2019-11-26 15:04:13
字体:
来源:转载
供稿:网友

代码非常简单实用,这里就不多废话了,直接奉上源码

package android.mooc.tools; import java.io.BufferedInputStream;import java.io.File;import java.io.RandomAccessFile;import java.net.URL;import java.net.URLConnection; import android.util.Log; public class FileDownloadThread extends Thread {  private static final int BUFFER_SIZE = 1024;  private URL url;  private File file;  private int startPosition;  private int endPosition;  private int curPosition;  // 用于标识当前线程是否下载完成  private boolean finished = false;  private int downloadSize;  private boolean state;   boolean destory;   public boolean isDestory() {    return destory;  }   public void setDestory(boolean destory) {    this.destory = destory;  }   public FileDownloadThread(URL url, File file, int startPosition, int endPosition) {    this.url = url;    this.file = file;    this.startPosition = startPosition;    this.curPosition = startPosition;    this.endPosition = endPosition;    this.downloadSize = 0;  }   @Override  public void run() {    destory = false;    state = true;    BufferedInputStream bis = null;    RandomAccessFile fos = null;    byte[] buf = new byte[BUFFER_SIZE];    URLConnection con = 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; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322;"              + " .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");       // 使用java中的RandomAccessFile 对文件进行随机读写操作      fos = new RandomAccessFile(file, "rw");      // 设置开始写文件的位置      fos.seek(startPosition);      bis = new BufferedInputStream(con.getInputStream());      // 开始循环以流的形式读写文件      while ((curPosition < endPosition) && (!destory)) {        while (state == false) {          sleep(2000);        }        int len = 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 (Exception e) {      e.printStackTrace();    }  }   public boolean isState() {    return state;  }   public void setState(boolean state) {    this.state = state;   }   public boolean isFinished() {    return finished;  }   public int getDownloadSize() {    return downloadSize;  }   public void setDownloadSize(int downloadSize) {    this.downloadSize = downloadSize;  } }

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表