public static final int threadCount =3;

public static void main(String[] args) throws IOException {

String path = "http://localhost:8080/oppo.mp4";//下载文件的路径,也可以是网上的路径

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");//Get请求

int code = conn.getResponseCode();

if(code == 200){

int length = conn.getContentLength();//文件的大小

RandomAccessFile raf = new RandomAccessFile("setup.mp4", "rwd");

/**

"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。

"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。

"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。

"rwd"   打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

*/

raf.setLength(length);//指定创建这个文件的大小

raf.close();//关闭流

//假设是三个线程

int blockSize = length / threadCount;

for(int i = 1; i<=threadCount; i++){

int startIndex = (i-1)*blockSize;

int endIndex = i*blockSize-1;

if(i==threadCount){//当线程为最后一个线程,则末尾等于文件的大小

endIndex = length;

}

new DownloadThread(i, startIndex, endIndex, path).start();//开启线程

}

}

}

public static class DownloadThread extends Thread{

private int threadId;//线程的Id

private int startIndex;//下载的开始位置

private int endIndex;//下载的结束位置

private String path;//下载文件的路径

public DownloadThread(int threadId, int startIndex, int endIndex,

String path) {

super();

this.threadId = threadId;

this.startIndex = startIndex;

this.endIndex = endIndex;

this.path = path;

}

@Override

public void run() {

try {

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

conn.setRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);

int code = conn.getResponseCode();

System.out.println("code:"+code);

//从服务器请求全部的资源成功返回 200  如果从服务器请求部分资源成功返回 206

if(code == 206){

InputStream is = conn.getInputStream();//已经设置了setRequestProperty

//RandomAccessFile随机文件访问类,可以指定从某个位置开始下载

RandomAccessFile raf = new RandomAccessFile("setup.mp4", "rwd");

raf.seek(startIndex);//定位文件

int len = 0;

byte[] buffer = new byte[1024];

while((len = is.read(buffer)) != -1){

raf.write(buffer,0,len);

}

is.close();

raf.close();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

java 断点下载_java的断点下载相关推荐

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

    多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内容.虽然实现了多线程及断点续传,但还有很多不完善的地方. 包含四个类: Downloa ...

  2. java如何实现下载_java 如何实现下载功能

    展开全部 import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import j ...

  3. jdbc连接mysql数据库驱动下载_Java Jdbc驱动下载配置连接mysql数据库方法代码

    1.MySQL JDBC驱动下载 打开上面的下载地址,选择"Platform Independent",然后下载tar.gz或zip格式的都行,之后解压出来得到Jdbc驱动(mys ...

  4. java 弹出下载_java如何实现下载弹出的对话框

    展开全部 Java实现点击下载32313133353236313431303231363533e58685e5aeb931333337396234文件的时候,弹出"另存为"对话框, ...

  5. java 打包边下载_JAVA实现边下载边压缩

    @ResponseBodypublic voiddownloadUrl(HttpServletResponse response, HttpServletRequest request){ Strin ...

  6. java 弹出下载_java怎么实现下载弹出的对话框

    Java实现点击下载文件的时候,弹出"另存为"对话框,选择保存位置,然后下载,代码如下: public void downLoad(String filePath, HttpSer ...

  7. java url类下载_Java根据url下载图片或文件的工具类-Fun言

    package cn.funyan.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io ...

  8. java利器下载_java利器app下载|

    java利器app是为java学习者提供简单的java文档编辑和一些常用的编程知识点的java手机软件.用户可以在java利器app内查看基础算法和学习资讯.欢迎感兴趣的用户来IT猫扑下载应用! ja ...

  9. java sdk下载_Java SDK的下载、安装和环境配置

    1.必应,搜索Java SDK 2.如图,选择Download,目前最新版本是14.01 选择合适的下载 3.创建文件夹,如图,依次创建Java.SDK.jdk文件夹 4.打开下载的安装包,开始安装 ...

最新文章

  1. c#算两个火星坐标的距离(高德or百度)
  2. go和python组合开发_混合Python和Go
  3. Cookie防伪造防修改
  4. 使用实例工厂方法实例化_一些工厂实例
  5. 【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘
  6. 用计算机模拟实验技术路线,自然科学基金申请书模板
  7. 《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了
  8. 备忘录:XCode配置
  9. 千斤顶装配图怎么画_机械制图——绘制千斤顶装配图教程.ppt
  10. 使用域名访问服务器网站,使用域名访问网站是啥意思
  11. 论文查重系统如何才安全?
  12. 信息安全等级保护分为几个级别呢?
  13. 13. 罗马数字转整数
  14. 离线语音远程遥控车控门制作教程(二)
  15. 报错!Exception in thread “main“ java.lang.UnsatisfiedLinkError: ilog.cplex.Cplex.CPXopenCPLEX([I)J
  16. Eclipse中Ant的使用
  17. 【HCIA-cloud】【4】服务器虚拟化之存储资源管理:存储资源类型说明、存储配置模式说明【普通、精简、延迟置零】、虚拟机磁盘类型说明、FusionCompute中操作添加存储
  18. centos7/redhat7创建私有云(owncloud)
  19. 详谈大学生如何确定自己的职业规划
  20. Node.js和Npm

热门文章

  1. svn resolved filename or directory that gives trouble
  2. 计算机室电源插座的配置及配电线路,小型机安装场地要求及机房环境电气要求讲课教案.pdf...
  3. Linux线程属性总结
  4. 如何使用CSK6的PSRAM内存资源
  5. xbox会员中心在哪_白金会会员中心
  6. CSS浮动+背景图片+边框+文字排版+段落设置
  7. 无法定位程序输入点?isPublicID@QXmlUtils@@SA_NAEVVQString@@@Z于动态链接库 D:\Qt\Qt5.7.0\5.7\msvc2015_64\bin\Qt5Cored
  8. AWVS11安装、操作
  9. android按键精灵源码,按键精灵手机版网络验证源码适用安卓/苹果ios手机按键
  10. ora-12514TNS 监听程序当前无法识别连接描述符中请求服务的解决