import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;/*** 多线程下载** @author song**/
public class ThreadDownloader {public static void main(String[] args) throws IOException, InterruptedException {// 记录开始下载的时间long begin_time = new Date().getTime();// 创建一个URL链接// 从QQ音乐官网上的qq音乐下载安装包,下面是下载地址final URL url = new URL("http://softcdn12.mydown.com/cs/166def/QQ%E9%9F%B3%E4%B9%90%E5%AE%A2%E6%88%B7%E7%AB%AF.exe");// 获取连接URLConnection conn = url.openConnection();// 获取文件全路径String fileName = url.getFile();// 获取文件名fileName = fileName.substring(fileName.lastIndexOf("/"));System.out.println("开始下载>>>");// 获取文件大小final int fileSize = conn.getContentLength();System.out.println("文件总共大小:" + fileSize + "字节");// 设置分块大小final int blockSize = 1024 * 1024;// 文件分块的数量int blockNum = fileSize / blockSize;if ((fileSize % blockSize) != 0) {blockNum += 1;}System.out.println("分块数->线程数:" + blockNum);Thread[] threads = new Thread[blockNum];for (int i = 0; i < blockNum; i++) {// 匿名函数对象需要用到的变量final int index = i;final int finalBlockNum = blockNum;final String finalFileName = fileName;// 创建一个线程threads[i] = new Thread() {@Overridepublic void run() {try {// 重新获取连接URLConnection conn = url.openConnection();// 重新获取流InputStream in = conn.getInputStream();// 定义起始和结束点int beginPoint = 0, endPoint = 0;System.out.print("第" + (index + 1) + "块文件:");beginPoint = index * blockSize;// 判断结束点if (index < finalBlockNum - 1) {endPoint = beginPoint + blockSize;} else {endPoint = fileSize;}System.out.println("起始字节数:" + beginPoint + ",结束字节数:" + endPoint);// 将下载的文件存储到一个文件夹中//当该文件夹不存在时,则新建File filePath = new File("E:/temp_file_space/");if (!filePath.exists()) {filePath.mkdirs();}FileOutputStream fos = new FileOutputStream(new File("E:/temp_file_space/", finalFileName + "_" + (index + 1)));// 跳过 beginPoint个字节进行读取in.skip(beginPoint);byte[] buffer = new byte[1024];int count;// 定义当前下载进度int process = beginPoint;// 当前进度必须小于结束字节数while (process < endPoint) {count = in.read(buffer);// 判断是否读到最后一块if (process + count >= endPoint) {count = endPoint - process;process = endPoint;} else {// 计算当前进度process += count;}// 保存文件流fos.write(buffer, 0, count);}fos.close();in.close();} catch (Exception e) {e.printStackTrace();}}};threads[i].start();}// 当所有线程都结束时才开始文件的合并for (Thread t : threads) {t.join();}// 若该文件夹不存在,则创建一个文件夹File filePath = new File("E:/download/");if (!filePath.exists()) {filePath.mkdirs();}// 定义文件输出流FileOutputStream fos = new FileOutputStream("E:/download/" + fileName);for (int i = 0; i < blockNum; i++) {FileInputStream fis = new FileInputStream("E:/temp_file_space/" + fileName + "_" + (i + 1));byte[] buffer = new byte[1024];int count;while ((count = fis.read(buffer)) > 0) {fos.write(buffer, 0, count);}fis.close();}fos.close();long end_time = new Date().getTime();long seconds = (end_time - begin_time) / 1000;long minutes = seconds / 60;long second = seconds % 60;System.out.println("下载完成,用时:" + minutes + "分" + second + "秒");}}

关于url网上下载安装包(java)相关推荐

  1. python下载安装包-python安装包 官方版

    python是一款通用的计算机程序设计语言,能够快速的进行代码编写,而且python语言具有非常简捷而清晰的语法特点,几乎可以在任何操作系统中运行,是一款非常实用的代码编程语言.有需要的朋友可以到本站 ...

  2. r语言从网页下载东西内容 r安装特定版本的r包 r从网页下载 安装包

    加载 library(RCurl) getBinaryURL(url, -, .opts = list(), curl = getCurlHandle(), .buf = binaryBuffer(. ...

  3. MAC下安装ElasticSearch(官网下载安装包)

    1.基础环境准备 Elasticsearch 依赖于JDK, 并且JDK 版本1.8+ 检验jdk  命令 : java -version 2.下载安装包 去官网下载https://www.elast ...

  4. android_ android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术)/从酷安市场下载安装包

    android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术-) download app(apk) Releas ...

  5. Hadoop(一)之实验一CentOS7配置Hadoop系统:配置CentOS和下载安装包

    文章目录 一.Vmware 二.创建虚拟机 1.安装centos7 2.配置静态IP.修改主机名 3.将刚刚的c0虚拟机克隆三台出来 4.在四台机子上设置hosts,一下以c0为例 5.配置 SSH ...

  6. Hadoop学习笔记(一)从官网下载安装包

    Hadoop是一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行快速运算和存储.要学习Hadoop从下载安装包開始 打开 ...

  7. EduSoho开源网校系统源码(附安装教程、下载安装包),支持开源免费下载

    文件大小 69M 运行环境 Linux 源码语言 PHP 授权形式 开源软件 操作系统 推荐Ubuntu16 授权协议 开源受限软件 软件类型 Web Application 软件官网 http:// ...

  8. Python在cmd下pip快速下载安装包的国内安装镜像

    cmd下安装报pip版本太老的错 python -m pip install --upgrade pip 下载安装包临时使用镜像可以加快下载速度 pip install numpy -i https: ...

  9. 微信跳转手机默认浏览器打开指定HTML链接 微信点击链接直接下载安装包实现方式及源码

    需求:微信跳转手机默认浏览器打开指定HTML链接 微信点击链接直接下载安装包 原因:在微信内不允许直接下载apk 这里有一个解决方案,直接上关键代码 <!doctype html> < ...

最新文章

  1. Redis缓存雪崩、缓存穿透、热点Key解决方案和分析
  2. java后台实现自定义排序,java 两种方式实现自定义排序
  3. 用POP动画引擎实现弹簧动画(POPSpringAnimation)
  4. JSON Web Token (JWT)生成Token及解密实战
  5. 关于逐项作用函数的用法
  6. 描写计算机老师上课的神态,请你用一段话描写一位老师上课的情景,注意抓住神态语言动作等细节...
  7. scala学习-12-scala读取java项目下Src目录下的properties文件
  8. 想要更好的云基础设施管理!你检查IT工具集了吗?
  9. extjs 实现 NumberField 即时计算
  10. Xamarin 技术全解析
  11. MyBatis Review——多对多映射
  12. 计算机网络跳槽自荐信,计算机网络应用专业求职自荐信范文
  13. 麒麟v10安装达梦数据库
  14. 深圳高中计算机老师招聘,深圳一所高中招聘20位老师,19人来自清华北大
  15. LC-3 中断实验 (深大计系1实验5)
  16. 港科夜闻|2022年香港科大气候适应及复原力大会圆满闭幕,政经领袖研讨香港气候政策与绿色金融发展...
  17. 12306登录python_基于Python3的12306登录实现
  18. java mkdir 使用_Java File mkdir()用法及代码示例
  19. 预装Win10的电脑改Win7的方法
  20. DenseNet 算法

热门文章

  1. MMTool制作Ozmosis引导BIOS完美引导OS X系统
  2. Html点击按钮自动刷新页面问题
  3. 原生小程序下拉刷新列表且保存之前的数据
  4. 常用网络安全问题排查命令总结
  5. m基于PSO粒子群算法的重采样算法仿真,对比随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样
  6. 2018思辨与创新章末测试答案
  7. Web APIs:移动端网页特效--移动端常用开发框架(Bootstrap)及阿里百秀轮播图案例
  8. ubuntu18.04 gif 录屏 peek
  9. svn提交文件到服务器,svn提交到远程服务器
  10. 计算机个配件常见的故障,电脑故障大全 常见主板及显卡故障大全介绍【图解】...