JAVA实现多线程断点下载
来源:互联网 发布:国服lol2017有mac版 编辑:程序博客网 时间:2024/05/22 13:17
public class jions { public static int runnling=3; public static int threadcount=3; public static void main(String[]args) throws Exception{ String path="http://down9.869v.com/setup_445.exe"; URL url=new URL(path); HttpURLConnection con= (HttpURLConnection) url.openConnection(); con.setReadTimeout(6000); con.setRequestMethod("GET"); int code= con.getResponseCode(); if(code==200){ int length= con.getContentLength();//已经设置了请求的位置//返回的是当前位置对应文件的输入流 RandomAccessFile raf=new RandomAccessFile("421.exe", "rwd");//记录当前线程下载的数据长度 raf.close(); //System.out.print("文件长度:"+length); int bolak =length/threadcount; for(int threadID=1;threadID<=threadcount;threadID++){ int starIndex=(threadID-1)*bolak; int endIndex=threadID*bolak-1; if(threadID==threadcount){ endIndex=length; } System.out.println("线程"+threadID+"下载---->"+starIndex+"----->"+endIndex); new MyThread(path, threadID, starIndex, endIndex).start(); } }else{ System.out.print("读取长度失败"); } } public static class MyThread extends Thread{ public MyThread(String path, int threadID, int starIndex, int endIndex) { super(); this.path = path; this.threadID = threadID; this.starIndex = starIndex; this.endIndex = endIndex; } private String path; private int threadID; private int starIndex; private int endIndex; public void run(){ try { //检查是否在记录下载长度的文件 如果存在读取这个文件的数据 File tempFile =new File(threadID+".txt"); if(tempFile.exists()&&tempFile.length()>0){ FileInputStream fis=new FileInputStream(tempFile); byte[] tpem=new byte[1024]; int leng =fis.read(tpem); String dowmlod =new String(tpem,0,leng); int downlodalenInt= Integer.parseInt(dowmlod); starIndex=downlodalenInt; fis.close(); } URL url=new URL(path); HttpURLConnection con =(HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("Range", "byte="+starIndex+"-"+endIndex); System.out.println("线程真实下载位置"+threadID+"下载----"+starIndex); con.setReadTimeout(8000); int code=con.getResponseCode(); System.out.println("code"+code); InputStream is= con.getInputStream(); RandomAccessFile raf=new RandomAccessFile("421.exe", "rwd"); raf.seek(starIndex); int len=0; byte[]buffer=new byte[1024]; int total=0; while((len=is.read(buffer))!=-1){ RandomAccessFile flie =new RandomAccessFile(threadID+".txt ","rwd"); raf.write(buffer,0,len); total+=len; System.out.println("线程"+threadID+"total:"+total); flie.write((total+starIndex+"").getBytes());//记录下载的位置 flie.close(); } is.close(); raf.close(); System.out.println("线程ID"+threadID+"下载完毕......"); } catch (Exception e) { e.printStackTrace(); }finally{ runnling--; if(runnling==0){ for(int i=1 ;i<=3;i++){ File file=new File(i+".txt"); file.delete(); } System.out.println("文件下载半壁删除所有下载记录"); } } } } }
0 0
- Java实现多线程断点下载
- JAVA实现多线程断点下载
- java实现多线程断点下载
- java实现http多线程下载,断点回复
- Java 实现多线程断点下载原理
- Java 多线程断点下载实现思路
- JAVA下实现多线程断点下载
- Java使用HttpUrlConnection实现多线程断点下载
- java 多线程断点下载
- java 多线程断点下载
- Java---多线程断点下载
- Java--多线程断点下载
- Java 多线程断点下载
- java 多线程断点下载
- java多线程断点下载
- java多线程断点下载
- Java---多线程断点下载
- java多线程断点下载
- 自定义控件其实很简单1/2
- Homebrew 的安装与使用
- LeetCode ZigZag Conversion
- MySQL集群配置
- HDU 1710
- JAVA实现多线程断点下载
- Different sizes of iPhone
- 关于opencv3.0 beta 编译出现ORB那边的错误的解决
- Nebula_level01
- hdu2159 二维完全背包
- spring框架的搭建的初步认识
- OCaml 中 module 和 Signature 的关系
- T0B9Tair max 女鞋 e11v YHG
- 7. Reverse Integer Leetcode Python