多线程断点续传下载文件
package com.multidownload.zz;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.URL;
import java.net.URLConnection;
public class MultiDownLoad {
public static int threadCount=8;
public static Integer finishThread=threadCount;
static String path="http://localhost:8080/MultiDownLoad/android-studio-bundle-145.3360264-windows.exe";
static String detPth="D:/android-studio-bundle-145.3360264-windows.exe";
public static void main(String[] args) throws Exception {
URL url=new URL(path);
URLConnection con = url.openConnection();
con.connect();
long contentLength = con.getContentLengthLong();
long eachThreadDownLoadsize=contentLength/threadCount;
for(int i=0;i<threadCount;i++){
long start=i*eachThreadDownLoadsize;
long end=(i+1)*eachThreadDownLoadsize-1;
if(i==threadCount)end=contentLength-1;
File file=new File("D:/"+i+".txt");
if(!file.exists()){
mutiDownLoad(i,start,end);
}else{
BufferedReader br=new BufferedReader(new FileReader(file));
String startAndEnd = br.readLine();
br.close();
String[] result = startAndEnd.split("=");
mutiDownLoad(i,Long.valueOf(result[0]),Long.valueOf(result[1]));
}
}
}
static void mutiDownLoad(final int threadId,final long start,final long end){
new Thread(){
public void run() {
RandomAccessFile raf = null;
try {
URL url = new URL(path);
URLConnection con = url.openConnection();
con.setRequestProperty("Range","bytes="+start+"-"+end);
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
con.connect();
InputStream responseIn = con.getInputStream();
File file = new File(detPth);
raf=new RandomAccessFile(file, "rwd");
raf.seek(start);
byte[] buffer=new byte[1024];
int len=0;
long total=0;
File record=new File("D:/"+threadId+".txt");
while((len=responseIn.read(buffer))!=-1){
raf.write(buffer, 0, len);
total+=len;
FileWriter fw=new FileWriter(record,false);
fw.write(start+total-1+"="+end);
fw.close();
}
synchronized (MultiDownLoad.finishThread) {
if(--MultiDownLoad.finishThread==0){
for(int i=0;i<threadCount;i++){
File deletef=new File("D:/"+i+".txt");
deletef.delete();
}
}
}
System.out.println(threadId+"---------"+total);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
Nothing gonna change my love for you.

浙公网安备 33010602011771号