conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
int code = conn.getResponseCode();
if (code == 200) {// 请求过去且回复内容正常的话 int len = conn.getContentLength(); RandomAccessFile file = new RandomAccessFile("D:/temp/test/" + getFileName(path), "rwd");
// 1.创建一个本地文件跟服务器的大小一致 file.setLength(len);
// 2.根据服务器中要下载的文件大小划分要多少个线程 int threadnum = 3; int blocksize = len / threadnum;
/** * 多线程下载 线程1 0 ~ blocksize 线程2 blocksize*1 ~ blocksize*2 线程3 * blocksize*2 ~ len */ for (int i = 0; i < threadnum; i++) { int startposition = i * blocksize; int endposition = (i + 1) * blocksize; if (i == (threadnum - 1)) {// 最后一个线程的话,那么就另endposition=len endposition = len; }
// 分别执行每一个线程
new DownloadTask(i, path, startposition, endposition).start(); }
} // conn.setRequestProperty(key, value);
}
public static String getFileName(String path) { int start = path.lastIndexOf("/"); return path.substring(start, path.length()); }