package cn.test.DownLoad;

 import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL; public class MultiPart {
public void down() throws Exception
{
//1、声明URL
String fileName="a.rar";
String path="http://localhost:8080/day23_MultiThreadDownLoad/file/"+fileName;
URL url=new URL(path);
//2、返回连接对象
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//3、设置请求类型
conn.setRequestMethod("GET");
//4、设置允许接收消息
conn.setDoInput(true);
//5、连接
conn.connect();
//6、状态码
int code=conn.getResponseCode();
if(code==200)
{
int sum=conn.getContentLength();//总长度
String downFile="d:\\"+fileName;
//7、创建一个相同大小的空文件
RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
file.setLength(sum);
file.close();
//8、声明线程数量
int threadCount=3;
//9、声明每个线程的下载量
int threadSize=sum/threadCount+((sum%threadCount==0)?0:1);
for(int i=0;i<threadCount;i++)
{
int start=i*threadSize;
int end=start+threadSize-1;
System.out.println("线程: "+i+" : "+start+" : "+end);
//10、启动线程
new myThread(start,end,downFile,url).start();
}
}
//11、关闭连接
conn.disconnect();
} public static void main(String[] args) {
try {
new MultiPart().down();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("OK");
}
} class myThread extends Thread
{
private int start;
private int end;
private String downFile;
private URL url;
public myThread(int start, int end, String downFile, URL url) {
this.start = start;
this.end = end;
this.downFile = downFile;
this.url = url;
} public void run() {
try {
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
//设置从哪里下载。断点
conn.setRequestProperty("range", "bytes="+start+"-"+end);
conn.connect();
int code=conn.getResponseCode();
if(code==206)
{
int size=conn.getContentLength();
InputStream in=conn.getInputStream();
//写同一文件
RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
//设置从文件的哪里开始写
file.seek(start);
byte[] b=new byte[1024];
int len=-1;
while((len=in.read(b))!=-1)
{
file.write(b, 0, len);
}
file.close();
}
conn.disconnect(); } catch (Exception e) {
e.printStackTrace();
}
}
}

Java实现多线程下载的更多相关文章

  1. Java实现多线程下载,支持断点续传

    完整代码:https://github.com/iyuanyb/Downloader 多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内 ...

  2. Java实现多线程下载 URL以及URLConnection

    主线程: public class MultiThreadDown { public static void main(String[] args) throws Exception{ //初始化Do ...

  3. 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】

    一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...

  4. Java 仿迅雷多线程下载

    package net.webjoy.jackluo.android_json; /** * 1.http Range "bytes="+ start+end * 2.Random ...

  5. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  6. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  7. Java开发之多线程下载和断点续传

    代码实现了多线程下载和断点续传功能 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  8. java多线程下载和断点续传

    java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...

  9. Java之多线程断点下载的实现

    RandomAccessFile类: 此类的实例支持对随机訪问文件的读取和写入.随机訪问文件的行为相似存储在文件系统中的一个大型 byte 数组. 存在指向该隐含数组.光标或索引,称为文件指针.输入操 ...

随机推荐

  1. 转:微博CacheService架构浅析

    文章来自于:http://www.infoq.com/cn/articles/weibo-cacheservice-architecture 微博作为国内最大的社交媒体网站之一,每天承载着亿万用户的服 ...

  2. 读取word文件.选择了TextParse

    待续! 代码还没分离出来.. 分离后会上传上来 不支持wps 文件 . ]]>

  3. 变身windows达人,用运行命令直接启动所有应用程序

    先看一下效果 在”运行“输入QQ,敲回车即打开登录窗口,相当于双击QQ登录快捷方式,对于码农.电脑一族这是不是一件高逼格,很酷的事?你甚至可以将任何你想设置命令启动的程序用该方式启动,比如敲chrom ...

  4. poj 2777Count Color

    http://poj.org/problem?id=2777 注意:a可能比b大 #include <cstdio> #include <cstring> #include & ...

  5. 其实,SSL也不是配通了就什么都不管的~~

    其中太多的中间人攻击需要去加强加固~~ 测试过A级是必须的!! https://www.ssllabs.com/ssltest/ 这网址两年前,我写过的哈

  6. C51与汇编语言混合编程

    函数内部混合编程 若想在C语言函数内部使用汇编语言,应使用以下Cx51编译器控制命令: #pragma asm ; Assembly code #pragma endasm  功能作用:asm和end ...

  7. 高效率使用google

    Google良好的搜索和易用性已经得到了广大网友的欢迎,但是除了我们经常使用的Google网站.图像和新闻搜索之外,它还有很多其他搜索功能和搜索技巧.如果我们也能充分利用,必将带来更大的便利.这里我介 ...

  8. 【转】带checkbox的ListView实现(二)——自定义Checkable控件的实现方法

    原文网址:http://blog.csdn.net/harvic880925/article/details/40475367 前言:前一篇文章给大家展示了传统的Listview的写法,但有的时候我们 ...

  9. HDOJ(HDU) 1718 Rank(水题、、、)

    Problem Description Jackson wants to know his rank in the class. The professor has posted a list of ...

  10. LinGo:疏散问题——线性规划,0-1规划

    个部门(A.B.C.D.E)组成.现要将它的几个部门迁出甲市,迁至乙市或丙市. (每个城市最多接纳三个部门) 除去因政府鼓励这样做以外,还有用房便宜,招工方便等好处.对这些好处已作出数量估计,其值如下 ...