java学习_小程序(四线程断点网络资源下载,即时进度反馈)
来源:互联网 发布:逆战天梯卡数据不扣分 编辑:程序博客网 时间:2024/05/23 01:58
/**
* 完成一个多线程断点下载工具
* 1.通过提供的网络文件地址,下载该文件
* 2.使用多个线程同时下载,并且实时更新下载进度(0%~100%)
* 3.能够实现断点功能
*/
* 完成一个多线程断点下载工具
* 1.通过提供的网络文件地址,下载该文件
* 2.使用多个线程同时下载,并且实时更新下载进度(0%~100%)
* 3.能够实现断点功能
package com.netDemo;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;public class MyThreadCopy extends Thread {/** * 完成一个多线程断点下载工具 * 1.通过提供的网络文件地址,下载该文件 * 2.使用多个线程同时下载,并且实时更新下载进度(0%~100%) * 3.能够实现断点功能 */private String sorce ;private File target ;private long start ;private long end ;public MyThreadCopy(String sorce,File target, long start, long end) {this.sorce = sorce ;this.target = target;this.start = start;this.end = end;}@Overridepublic void run() {InputStream input = null ; RandomAccessFile output = null;long count = 0;try {URL url = new URL(sorce);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setReadTimeout(100); input = conn.getInputStream();output = new RandomAccessFile(target, "rw");long total = conn.getContentLength();File targetp = new File(target.getParent(),"copy");ProgressReturn pr = new ProgressReturn (total,Long.valueOf(getName().substring(7)),targetp,target);pr.start();input.skip(start+pr.getCurrent());output.seek(start+pr.getCurrent());byte[] b = new byte[1024];int len = 0;while ((len = input.read(b)) != -1 && count <= (end - start)) {sleep(1000);output.write(b, 0, len); count += len;pr.setCurrent(count);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (output != null)output.close();if (input != null)input.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) throws IOException {String sorce = "http://img.taopic.com/uploads/allimg/131117/234805-13111FZ25393.jpg"; URL url = new URL(sorce);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setReadTimeout(10000);int code =conn.getResponseCode();if(code == HttpURLConnection.HTTP_OK){ long length = conn.getContentLength(); long needToCopy = length/4 ; File target = new File ("C:\\Users\\ddf\\Desktop\\test",sorce.substring(sorce.lastIndexOf("/")));//新生成的目标文件 路径 for(int i = 0 ;i < 4 ;i++){ new MyThreadCopy(sorce,target,i*needToCopy,(i+1)*needToCopy).start(); }}}}
package com.netDemo;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;public class ProgressReturn extends Thread {private long total ;//源文件要拷贝的总字节数目private long current ;//记录当前所有线程共写了多少字节private long index ;//当前是哪个线程 由 thread.getId()传值;private File targetP ;//记录文件private long ctotal ;//当前四个进程一共写了多少private File target ; //要写入的目标文件public ProgressReturn(long total, long index, File targetP,File target) {super();this.total = total;this.index = index;this.targetP = targetP;this.target = target;}public long getCurrent(){return current; // 向外提供每个线程当前拷贝字节数 ,用于断点拷贝}public void setCurrent(long current){this.current = current;}@Overridepublic void run() {while(ctotal != total){try {RandomAccessFile raf = new RandomAccessFile(targetP,"rw");raf.seek(index*8);raf.writeLong(current);ctotal = target.length(); System.out.println("当前总进程拷贝了:"+ctotal*1.0/total*100+"%");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}System.out.println("拷贝100%,完成");if(ctotal == total) {if(targetP.exists()){targetP.delete();}System.out.println("已删除记录文件");}}}
*/
阅读全文
1 0
- java学习_小程序(四线程断点网络资源下载,即时进度反馈)
- 简版断点下载跟进度显示小程序
- Java多线程、断点下载程序
- Java 多线程断点下载文件_详解
- 学习url读取网络资源,开启线程来下载图片
- Java之多线程断点下载的实现
- Java之多线程断点下载的实现
- Java基础之多线程断点下载
- android中实现文件线程下载并记录进度值,不支持断点下载(一)
- Java多线程下载网络资源
- 断点下载,一个线程
- java网络编程之android多线程断点下载并提供下载进度(三)
- java开发_java小程序_邮死你(yousini)_源码下载
- 小程序八:操作反馈
- 多线程_线程同步小程序
- 下载网络资源方法-java版
- 网络_断点续传.断点下载
- 小程序学习(四)
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- AlarmManager与NotificationManager
- 数据库连接池的代码实例(DHCP、C3P0)
- 设计模式--备忘录模式
- G
- java学习_小程序(四线程断点网络资源下载,即时进度反馈)
- java求解一给定数字的二进制表达中的1的个数
- ctrl+v粘贴快捷键突然不能使用的原因及解决方案
- Linux学习总结(37)——CentOS7下Firewall防火墙配置用法详解
- Square HDU
- What Is Your Grade? HDU
- PHP 正则表达式抓取网页内容。
- 文章标题
- shiro