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("文件下载半壁删除所有下载记录"); } } } } }
原文地址:http://blog.csdn.net/a8903289/article/details/43216705