在java中下载app
package cn.hp.xiazai;
import org.w3c.dom.ranges.Range;
import javax.xml.stream.events.StartDocument;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
//断点线程
public class OneXiaZai {
public static void main(String[] args) {
//下载的地址
String path = "http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe";
//三个线程
int threadCount=3;
try {
//创建url对象
URL url = new URL(path);
//打开url对应的服务器连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");//设置get提交
conn.setConnectTimeout(5000);//设置连接超时时间
conn.setReadTimeout(5000);//设置读取超时时间
//获取状态码
int responseCode = conn.getResponseCode();
System.out.println("responseCode = " + responseCode);
//分段下载相应,如果相应正确200
if (responseCode == 200) {
//获取文件的大小
int contentLength = conn.getContentLength();
System.out.println("文件总大小+" + contentLength);
//切割为三份,计算每份的大小
int size = contentLength / 3;
//线程 1 :0-size 线程2:size-size2
for (int i = 0; i < threadCount; i++) {
DownloadThread dt = new DownloadThread();
dt.setName("线程"+(i+1));
dt.setPath(path);
dt.setStart(i * size);//开始的位置
dt.setEnd((i + 1) * size);//结束的位置
dt.start();
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
下载文件的一段的子线程,至少要三个属性
path
start
end
* **/
class DownloadThread extends Thread{
private String path;
private long start;
private long end;
//下载一段
@Override
public void run() {
String path="http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe";
try {
//创建url对象
URL url = new URL(path);
//打开url对应的服务器连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");//设置get提交
conn.setConnectTimeout(5000);//设置连接超时时间
conn.setReadTimeout(5000);//设置读取超时时间
conn.setRequestProperty("Range","bytes="+start+"-"+end);
//获取状态码
int responseCode = conn.getResponseCode();
System.out.println("responseCode = " + responseCode);
//分段下载相应,如果相应正确206
if(responseCode==206){
//下载
InputStream in = conn.getInputStream();
String headerField = conn.getHeaderField("Content-Disposition");
String field = headerField.split(";")[1];
String fileName = field.substring(field.indexOf("\"") + 1,field.lastIndexOf("\""));
File file = new File(fileName);
//下载,写入数据到文件
RandomAccessFile raf = new RandomAccessFile(file, "rwd");//可读可写
raf.seek(start);
//读一组,写一组
int len=0;
byte[] bytes=new byte[1024];
while ((len=in.read(bytes))!=-1){
raf.write(bytes,0,len);
}
raf.close();
in.close();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public long getStart() {
return start;
}
public void setStart(long start) {
this.start = start;
}
public long getEnd() {
return end;
}
public void setEnd(long end) {
this.end = end;
}
}