java学习_小程序(四线程断点网络资源下载,即时进度反馈)
2017-07-23 20:24
525 查看
/**
* 完成一个多线程断点下载工具
* 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 ; privat 4000 e 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; } @Override public 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 block e.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; } @Override public 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("已删除记录文件"); } } }
*/
相关文章推荐
- Java网络编程之单线程下载文件设置显示进度
- java网络编程之android多线程断点下载并提供下载进度(三)
- Java网络编程之单线程下载文件设置显示进度(一)
- 学习url读取网络资源,开启线程来下载图片
- JAVA写的多线程下载程序,并具有断点续传功能
- 学习Java必须知道的专业网站和网络资源
- Java学习必备资源下载列表
- 用java编写多线程ftp断点下载文件程序
- 一个简单的多线程、断点下载Java程序
- 大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
- java学习5---Java 的多线程,程序、进程和线程的概念
- JAVA程序网络图片下载
- Java之多线程下载网络资源
- 下载网络资源方法-java版
- Java网络编程之实现HTTP断点续传下载工具(附源代码)
- java 下载网络资源的源码供参考
- Java多线程、断点下载程序
- java网络下载小程序
- Java和Android学习中的一些资源(网络搜集)
- 用java编写多线程ftp断点下载文件程序