java实现适用于安卓的文件下载线程类_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;
  }

}

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
文件下载类
java线程池实现原理、java多线程实现方式、java实现多线程、java线程实现方式、java实现线程的方法,以便于您获取更多的相关知识。

时间: 2024-11-08 18:20:00

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

java获得mysql和oracle链接的类_java

本文实例讲述了java获得mysql和oracle链接的类.分享给大家供大家参考.具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectDB { private static final String MYSQL = "jdbc:mysql://"; private static final String ORA

Java并发编程示例(十):线程组_java

对线程分组是Java并发API提供的一个有趣功能.我们可以将一组线程看成一个独立单元,并且可以随意操纵线程组中的线程对象.比如,可以控制一组线程来运行同样的任务,无需关心有多少线程还在运行,还可以使用一次中断调用中断所有线程的执行. Java提供了ThreadGroup类来控制一个线程组.一个线程组可以通过线程对象来创建,也可以由其他线程组来创建,生成一个树形结构的线程. 根据<Effective Java>的说明,不再建议使用ThreadGroup.建议使用Executor. --D瓜哥特此

Java并发编程示例(三):线程中断_java

一个多线程的Java程序,直到所有线程执行完成,整个程序才会退出.(需要注意的是,是所有非后台线程(non-daemon thread)执行完成:如果一个线程执行了System.exit()方法,程序也会退出.)有时,你想中止一个线程的执行,例如你想退出程序,或者你想取消一个正在执行的任务等. Java提供了中断机制,可以让我们显式地中断我们想中止执行的线程.中断机制的一个特征就是我们可以检查线程是否已经被中断,进而决定是否响应中止请求.线程也可以忽略中止请求,继续执行. 在本节,我们所开发的示

java实现excel导入数据的工具类_java

导入Excel数据的工具类,调用也就几行代码,很简单的. 复制代码 代码如下: import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import org.apache.commons.beanutils.BeanUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java.io.IOExc

求高手点拨一个:“Java线程类”的问题.

问题描述 求高手点拨:一个子线程中,应该不能再架子线程了吧..?怎么下面的代码:publicvoidrun(){newThread(newRunnable(){publicvoidrun(){while(true){try{System.out.println(ssoo1.read(so3)+"----------------------");}catch(IOExceptione1){e1.printStackTrace();}}}}).start();System.out.prin

深入解析Java中ThreadLocal线程类的作用和用法_java

ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量.这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,每个线程只能拿到该变量的一个副本,这是Java API中的描述,通过阅读API源码,发现并非副本,副本什么概念?克隆品? 或者是别的样子,太模糊.   准确的说,应该是ThreadLocal类型的变量内部的注册表(Map<Thread,T>)发生了变化,但ThreadLocal类型的变量本身的确是一个,这才是本质!  

java 中如何实现多个线程共享一个类

问题描述 java 中如何实现多个线程共享一个类 预想: 一个类 ClassA 中的一个类变量 public static int data = 100; 我起一个main方法 调用 ClassA.data = 200; 再起一个main方法 读取ClassA.data 获取的值就是200? 任意线程修改单例的ClassA 其他线程读取都是最新的 如何做到? 解决方案 java如何实现多个线程并发运行 解决方案二: 启动2个main,不是线程,是进程. 解决方案三: 用final修饰 publi

java线程问题-java线程类的作用是什么,目的是不是同时执行两个或两个以上的任务

问题描述 java线程类的作用是什么,目的是不是同时执行两个或两个以上的任务 java线程类的作用是什么,目的是不是同时执行两个或两个以上的任务 线程对象可以调用任意public方法吗 解决方案 你所写的主程序本身就是一个线程,称之为主线程,而线程类是用来执行一段很耗时,然后又不需要过多的干预的代码.比如说你要设计一个UI界面,界面上要有一个显示时间的时钟,这时你就可以自己设计一个线程,然后将时钟代码放到线程中,让其自主运行,而又不会影响UI界面上其它的操作.

求Java线程类经典面试题素材

问题描述 岁末年初又是一年跳槽季,想为面试提前准备一些素材.每每被问到一些线程类的问题时,总是哑口无言.每念及此痛不欲生--各位Java达人在面试过程中问别人或者被问到的典型线程类问题?求素材.提供好素材的有积分.提供好问题而且还提供答案的,优先给积分. 解决方案 直接看<java并发实践> 和 <分布式Java应用:基础与实践>解决方案二:http://www.mianwww.com/这里一堆面试题,如果你只是针对线程方面的知识,在这个网站的站内搜索能搜到很多解决方案三:看<