Java多线程下载文件
package com.test.download;import java.io.File;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;/* * 多线程下载 */public class MulThreadDownload { public static void main(String[] args) throws Exception { String path = "http://pic.4j4j.cn/upload/pic/20130909/681ebf9d64.jpg"; new MulThreadDownload().download(path,3); } public void download (String path,int threadsize) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if(conn.getResponseCode() == 200){ //获取网络文件长度 int length = conn.getContentLength(); //新建本地文件保存下载数据 File file = new File(getFilename(path)); //计算每条线程负责下载的数据量 int block = length%threadsize==0 ? length/threadsize : length/threadsize+1; //开启指定数目的线程同时下载 for(int threadid = 0; threadid < threadsize; threadid++){ new DownloadThread(threadid,block,url,file).start(); } }else{ System.out.println("下载失败!"); } } private class DownloadThread extends Thread{ private int threadid; //线程编号 private int block; //下载块大小 private URL url; //下载链接 private File file; //下载数据保存文件 public DownloadThread(int threadid, int block, URL url, File file) { this.threadid = threadid; this.block = block; this.url = url; this.file = file; } public void run() { int start = threadid * block; //本线程下载数据写入文件开始位置 int end = (threadid+1) * block - 1; //本线程下载数据写入文件结束位置 try { //创建一个随机访问文件流对象 RandomAccessFile accessFile = new RandomAccessFile(file, "rwd"); //文件指针偏移至正确写入位置 accessFile.seek(start); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); //设置请求数据的范围 conn.setRequestProperty("Range", "bytes="+start+"-"+end); if(conn.getResponseCode() == 206){//状态码206:(部分内容) 服务器成功处理了部分 GET 请求 InputStream inStream = conn.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = inStream.read(buffer)) != -1){ accessFile.write(buffer, 0, len); } accessFile.close(); inStream.close(); } System.out.println("第"+(threadid+1)+"部分下载完成"); } catch (Exception e) { e.printStackTrace(); } } } private String getFilename(String path) { return path.substring(path.lastIndexOf("/")+1); }}Java多线程下载文件的更多相关文章
- java 多线程下载文件 以及URLConnection和HttpURLConnection的区别
使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...
- java 多线程下载文件并实时计算下载百分比(断点续传)
多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...
- java多线程下载文件和断点下载
多线程,断点下载文件 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; impor ...
- 最新---java多线程下载文件
import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...
- JAVA多线程下载网络文件
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件. 源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...
- java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...
- java多线程下载和断点续传
java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...
- 多线程下载文件,ftp文件服务器
1: 多线程下载文件 package com.li.multiplyThread; import org.apache.commons.lang3.exception.ExceptionUtils; ...
- Java多线程下载分析
为什么要多线程下载 俗话说要以终为始,那么我们首先要明确多线程下载的目标是什么,不外乎是为了更快的下载文件.那么问题来了,多线程下载文件相比于单线程是不是更快? 对于这个问题可以看下图. 横坐标是线程 ...
随机推荐
- MVC3 中使用 Ajax.ActionLink Ajax.BeginForm
原文发布时间为:2011-05-01 -- 来源于本人的百度文章 [由搬家工具导入] http://msdn.microsoft.com/en-us/library/dd381533%28VS.98% ...
- 改变querystring值,然后重定向
原文发布时间为:2009-11-13 -- 来源于本人的百度文章 [由搬家工具导入] 本页面改变querystring值,然后重定向 本页面,避免出现重复querystring。。 如避免出现 www ...
- sql查询字段值只为汉字(桃)
SELECT * FROM roster WHERE roster.`name` >'zzzzzzzzzz' //查询roster表中name值为中文的 SELECT * FROM rost ...
- 调用Outlook发送邮件
#region 查找与指定文件关联在一起的程序的文件名 /// <summary> /// 查找与指定文件关联在一起的程序的文件名 /// </summary> /// < ...
- @RequestMapping定义不同的处理器映射规则
通过@RequestMapping注解可以定义不同的处理器映射规则. 1. URL路径映射 @RequestMapping(value="item")或@RequestMappin ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---33
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- netbeans8.2下struts2的Java Web开发Demo1
struts2框架主要是封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码. 过去,我们用jsp和servlet搭配,实现展现时,大体的过程是: ...
- Ansible进阶之企业级应用
1.环境 cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 ...
- 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
Solution 我们发现, 对于一条路径来说, 花费总时间为\(ap + q\), 其中\(p\)和\(q\)为定值. 对于每个点, 我们有多条路径可以到达, 因此对于每个区间中的\(a\)我们可以 ...
- 细微之处见功夫!这5点让Wish3D Earth与众不同
产品的体验是全方位的,任何一点,都可能决定成败.细微之处见功夫,5个细节,告诉你Wish3D Earth为什么与众不同. 中科图新最新发布的Wish3D Earth,是基于WebGL技术的网页版三维地 ...