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

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

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;
  }

}

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

(0)

相关推荐

  • JavaWeb利用struts实现文件下载时改变文件名称

    先看看效果图: package com.fenghuo.struts.download; import java.net.URLEncoder; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.

  • java实现FTP文件上传与文件下载

    本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.TelnetInputStream; import sun.net.TelnetO

  • Java Web端程序实现文件下载的方法分享

    Web文件下载有两种,一种是文件在网站目录下,在浏览器中直接输入文件路径即可下载,如http://www.xxx.com/file.zip.另外一种是文件不在网站目录下或者文件是动态生成的(导出报表或者导出excel等),这种情况需要通过response的OutputStream实现文件的下载.DownloadUtils是一个Java Web文件下载工具类,提供多种静态方法实现文件下载. package com.rhui.util; import java.io.BufferedInputStr

  • 详解Java文件下载的几种实现方式

    Java文件下载的几种方式,具体如下: public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径. File file = new File(path); // 取得文件名. String filename = file.getName(); // 取得文件的后缀名. String ext = filename.substring(filena

  • Struts2实现文件下载功能代码分享(文件名中文转码)

    struts2文件下载功能实现代码如下所示: Action文件 public class DownLoadAction extends ActionSupport { /** * */ private static final long serialVersionUID = 5879762231742395104L; private String fileName;//用户请求的文件名 private String inputPath;//下载资源的路径(在struts配置文件中设置) publ

  • java使用http实现文件下载学习示例

    复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import

  • struts2实现文件下载功能

    文件下载是一个很常见的功能,用struts2实现文件下载的步骤: 一).定义一个Action类,FileDownload.java package com.struts2.filedownload; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; //文件下载 public class FileDown

  • JavaEE实现文件下载

    我们先来看一个最简单的文件下载的例子: 复制代码 代码如下: package com.yyz.response;  import java.io.FileInputStream;  import java.io.IOException;  import java.io.OutputStream;  import javax.servlet.ServletException;  import javax.servlet.http.HttpServlet;  import javax.servlet

  • Java Web实现文件下载和乱码处理方法

    文件上传和下载是web开发中常遇到的问题,这几天在做一个项目又用到了文件下载,之前也零零散散记了些笔记,今天来做一下整理.文件上传还有待进一步测试,这里先说一下文件下载. 一.文件下载处理流程 文件下载处理流程其实很清晰,即: 1.根据文件名或者文件路径定位文件,具体的策略主要根据自己的需求,总之需要系统能找到的文件全路径. 2.获取输入流,从目标文件获取输入流. 3.获取输出流,从response中获取输出流. 4.从输入流读入文件,通过输出流输出文件.这是真正的下载执行过程. 5.关闭IO流

  • Java Web项目中实现文件下载功能的实例教程

    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>通过链接下载文件&

随机推荐