本文实例为大家分享了Java多线程下载文件的具体代码,供大家参考,具体内容如下
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://192.168.1.100:8080/Hello/Big.exe";
new MulThreadDownload().download(path, 3);
}
/**
* 下载文件
*
* @param path
* 网络文件路径
* @param threadSize
* 线程数
* @throws Exception
*/
private void download(String path, int threadSize) throws Exception {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
if (connection.getResponseCode() == 200) {
int length = connection.getContentLength();// 获取网络文件长度
File file = new File(getFileName(path));
// 在本地生成一个长度与网络文件相同的文件
RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");
accessFile.setLength(length);
accessFile.close();
// 计算每条线程负责下载的数据量
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("download fail");
}
}
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;
}
@Override
public void run() {
int start = threadId * block; // 计算该线程从网络文件什么位置开始下载
int end = (threadId + 1) * block - 1; // 计算下载到网络文件什么位置结束
try {
RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");
accessFile.seek(start); //从start开始
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
//设置获取资源数据的范围,从start到end
connection.setRequestProperty("Range", "bytes=" + start + "-"
+ end);
//注意多线程下载状态码是 206 不是200
if (connection.getResponseCode() == 206) {
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
accessFile.write(buffer, 0, len);
}
accessFile.close();
inputStream.close();
}
System.out.println("第" + (threadId + 1) + "条线程已经下载完成");
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取文件名称
*
* @param path
* 网络文件路径
* @return
*/
private String getFileName(String path) {
return path.substring(path.lastIndexOf("/") + 1);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java多线程下载文件
# Java下载文件
# Java多线程下载
# Java多线程下载的实现方法
# java多线程实现下载图片并压缩
# Java实现多线程断点下载实例代码(下载过程中可以暂停)
# java多线程实现文件下载功能
# java多线程实现文件下载
# Java实现多线程文件下载的代码示例
# Java多线程文件分片下载实现的示例代码
# Java多线程下载网图的完整案例
# 多线程
# 大家分享
# 每条
# 具体内容
# 大家多多
# 下载完成
# http
# path
# String
# main
# args
# Exception
# throws
# int
# private
# url
# openConnection
# connection
# exe
# Big
相关文章:
c# await 一个已经完成的Task会发生什么
如何通过西部数码建站助手快速创建专业网站?
如何在西部数码注册域名并快速搭建网站?
建站之星如何保障用户数据免受黑客入侵?
建站主机无法访问?如何排查域名与服务器问题
已有域名如何免费搭建网站?
制作网站外包平台,自动化接单网站有哪些?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何在VPS电脑上快速搭建网站?
c# 服务器GC和工作站GC的区别和设置
音乐网站服务器如何优化API响应速度?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
无锡营销型网站制作公司,无锡网选车牌流程?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何选择可靠的免备案建站服务器?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何用AWS免费套餐快速搭建高效网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站之星客服服务时间及联系方式如何?
平台云上自主建站:模板化设计与智能工具打造高效网站
如何快速搭建自助建站会员专属系统?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在IIS7上新建站点并设置安全权限?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何在Windows虚拟主机上快速搭建网站?
威客平台建站流程解析:高效搭建教程与设计优化方案
css网站制作参考文献有哪些,易聊怎么注册?
建站主机选哪家性价比最高?
html制作网站的步骤有哪些,iapp如何添加网页?
香港网站服务器数量如何影响SEO优化效果?
如何在云主机上快速搭建多站点网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
昆明网站制作哪家好,昆明公租房申请网上登录入口?
如何在宝塔面板中创建新站点?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
,石家庄四十八中学官网?
制作网站公司那家好,网络公司是做什么的?
深圳网站制作培训,深圳哪些招聘网站比较好?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
东莞专业制作网站的公司,东莞大学生网的网址是什么?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
广东企业建站网站优化与SEO营销核心策略指南
制作门户网站的参考文献在哪,小说网站怎么建立?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
C#如何在一个XML文件中查找并替换文本内容
家具网站制作软件,家具厂怎么跑业务?
如何在阿里云购买域名并搭建网站?
C++如何使用std::optional?(处理可选值)
建站之星在线客服如何快速接入解答?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
*请认真填写需求信息,我们会在24小时内与您取得联系。