java多线程下载网络资源

在java中,我们可以通过URL和HttpURLConnection实现对资源的多线程下载,以此来减少资源的下载时间,下面是一个实现多线程下载的例子,不足的是没实现断点下载的功能



import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;


public class DownLoadTool{

public void resourceDownLoad(String path) throws Exception {
//网络资源路径
//如path = "http://www.hackvip.com/desk/d/0/3/2006110911245141091.jpg";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(6*1000);
conn.setRequestMethod("GET");
//获得网络上文件的大小
int fileSize = conn.getContentLength();
//线程的数量
int threadNum = 4;
//我用三个线程对文件进行下载,每个线程下载量为
int block = fileSize/threadNum + 1;
conn.disconnect();
//保存在项目的根目录下,如我下载的是一张图片
File file = new File("a.jpg");
RandomAccessFile rfile = new RandomAccessFile(file,"rw");
rfile.setLength(fileSize);
rfile.close();
for (int i = 0; i < threadNum; i++) {
int startPosition = i*block;
RandomAccessFile randomFile = new RandomAccessFile(file,"rw");
//从文件的什么位置开始写入
randomFile.seek(startPosition);
new DownLoadThread(i,url,randomFile,startPosition,block).start();
}
byte[] b = new byte[1];
System.in.read(b);
while(!(b[0]=='q')){
Thread.sleep(5*1000);
}

}

private class DownLoadThread extends Thread{
private URL url = null;
private RandomAccessFile rfile = null;
private int startPosition = 0;
private int block = 0;
private int i = 0;
public DownLoadThread(int i,URL url, RandomAccessFile rfile,
int startPosition, int block) {
this.i = i;
this.url = url;
this.rfile = rfile;
this.startPosition = startPosition;
this.block = block;
}

@Override
public void run() {
try {
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Range", "bytes" + startPosition + "-");
conn.setConnectTimeout(6*1000);
InputStream is = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = -1;
int readSize = 0;
while(readSize<block && ((len=is.read(buffer))!=-1)){
rfile.write(buffer, 0, len);
readSize += len;
}
rfile.close();
is.close();
conn.disconnect();
System.out.println("第" + (++i) + "个线程下载完成");
} catch (IOException e) {
e.printStackTrace();
}

}
}

}



编写一个测试类,传入一个资源路径,当然前提是该资源网站没有设置防盗链


import org.junit.Test;

public class DownLoadTest {

@Test
public void test() {
String path = "http://www.hackvip.com/desk/d/0/3/2006110911245141091.jpg";
try {
new DownLoadTool().resourceDownLoad(path);
} catch (Exception e) {
e.printStackTrace();
}
}

}

【第85题】JAVA高级技术-网络编程4(网络资源的多线程下载) 网络编程 阅读详情

相关推荐

Java多线程下载网络资源

Java多线程下载网络资源,已打成可执行jar包,下载时只需修改相应配置文件即可

Java通过URL进行多线程下载

*** 通过 URL 多线程下载文件* URL 对象提供的openStream() ,再通过它获取 URL 资源的 InputStream。// 获取当前时间 long begin_time = new Date() . getTime();//获取该URL的资源名,然后获取文件名 String fileName = url . getFile();System . out . println("开始下载>>>");

qq_42900213的博客 737

泛微OA与金蝶云星空深度集成实战:审批与表单双场景解析

本文深入解析泛微OA与金蝶云星空的深度集成实战,聚焦审批流程与表单对接两大核心场景。通过具体案例,详细阐述了如何实现业务数据与审批流程的自动联动,打破数据孤岛,提升企业运营效率与数据一致性,并分享了接口设计、安全策略及实战避坑指南。

4k5l6j7h8的博客 466

Java实现简单的多线程URL下载器

程序主要类中的数据成员主要是主窗口的各个组件,而主要进行的操作就是所有组件的初始化以及添加到主窗口并显示窗口,最重要的是为了所有按钮添加事件监听程序,不同的按钮对应不同的操作,“新建下载”是输入所有参数和初始化下载线程(可能读取配置文件),“继续下载”是打开一个存在的配置文件并且用其中的信息进行下载线程的初始化,“开始”是启动所有下载线程和统计线程,“暂停”是保存当前下载进度到配置文件并且结束所有下载线程。如果判断到读取出的字节数为-1,说明该下载线程已经下载完成了需要下载的数据,那么关闭输入输出流。

moonwalker的博客 2934

西门子S7-200 SMART PLC高速计数器与增量式编码器实战配置指南

在工业自动化控制系统中,传感器是将物理量转换为电信号的关键组件,其中编码器作为核心的位置与速度检测元件,其工作原理基于光电或磁电效应,将机械位移转换为脉冲序列。增量式编码器通过输出相位差90度的A/B两相脉冲,不仅能实现精确的位移测量,还能通过相位关系自动判别运动方向,并通过倍频技术提升分辨率。其技术价值在于为PLC等控制器提供了实时、高精度的位置反馈,是实现闭环控制、提升系统精度与可靠性的基础。在包装机械、物料输送、绕线设备等应用场景中,编码器与PLC高速计数器的协同工作是实现精确定位、定长切割与速度控制

weixin_29178069的博客 394

实战STM32G0驱动DRV8870/AT8870:PWM+DMA精准调速与H桥衰减模式详解

本文详细介绍了如何使用STM32G0单片机结合DRV8870/AT8870电机驱动芯片实现直流有刷电机的精准控制。重点讲解了PWM与DMA结合实现高效调速的硬件配置与软件驱动方法,并深入剖析了H桥快衰减与慢衰减模式的工作原理及应用场景,为嵌入式电机控制项目提供了完整的实战解决方案。

c7d8e9的博客 595

Java实现多线程下载

思路: 1、基本思路是将文件分段切割、分段传输、分段保存。 2、分段切割用到HttpUrlConnection对象的setRequestProperty("Range", "bytes=" + start + "-" + end)方法。 3、分段传输用到HttpUrlConnection对象的getInputStream()方法。 4、分段保存用到RandomAccessFile...

dongfucuan2310的博客 229

[Java多线程实现批量下载文件,层层优化多种方案实现?]

望岳 (唐) 杜甫 岱宗夫如何,齐鲁青未了。造化钟神秀,阴阳割昏晓。 荡胸生层云,决雌入归鸟。会当凌绝顶,一览众山小。

汤圆的博客 4853

【LDLTS解析】从重叠峰到精准参数:拉普拉斯深能级瞬态光谱如何重塑半导体缺陷分析

本文深入解析了拉普拉斯深能级瞬态光谱(LDLTS)技术如何革新半导体缺陷分析。针对传统DLTS难以分辨重叠峰的痛点,LDLTS通过拉普拉斯逆变换对高精度电容瞬态曲线进行数学解卷积,成功分离发射率相近的缺陷信号,实现从模糊宽峰到精准独立峰的转变。该技术不仅大幅提升了缺陷激活能和捕获截面等关键参数的提取精度,更推动分析范式从经验拟合转向第一性原理,为先进半导体工艺开发与良率提升提供了强大的精准诊断工具。

weixin_29224309的博客 273

[代码开源]基于DistFlow的IEEE33和IEEE69节点最优潮流模型(OPF)实现与性能分析

本文详细介绍了基于DistFlow的IEEE33和IEEE69节点最优潮流模型(OPF)的实现与性能分析。通过代码开源,展示了如何从零搭建电力系统优化模型,解决配电网中的发电成本最小化问题。文章涵盖数据准备、模型实现细节、性能优化建议及常见问题解答,为电力系统研究者提供实用参考。

weixin_29103191的博客 707

java高级技术——网络资源的多线程下载

java高级技术——网络资源的多线程下载

weixin_59796310的博客 453

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 172

Java带有简单Swing界面的网络资源多线程下载

Java带有简单Swing界面的网络资源多线程下载 一、写了一个带有简单Swing界面网络资源多线程下载的程序,本人也是第一次学,琢磨了一下午终于把这个程序写出来了。其中经过不懈努力的找BUG,总算写成功了。 二、里面用到的只是也是网络编程的知识,包括了URL,HttpURLConnection等,不懂的小伙伴可以自己查阅一下相关资料哦。 三、接下来有一个重点 ! 本人在程序中下载的网络上的图片资源。在复制图片链接时,并不是要复制网页中地址栏的信息哦,而是找到想要下载的图片,然后右击它,复制图片地址,再粘贴

weixin_45484212的博客 380

【RT-DETR改进涨点】ResNet18、34、50、101等多个版本移植到ultralytics仓库(RT-DETR官方一比一移植)

本文是本专栏的第一篇改进,我将RT-DETR官方版本中的ResNet18、ResNet34、ResNet50、ResNet101移植到ultralytics仓库,网上很多改进机制是将基础版本的也就是2015年发布的ResNet移植到ultralytics仓库中,但是其实RT-DETR实验的ResNet和其是有很大区别的在其中有很多细节上的不同(文章中我也会列出举例)

Snu77的博客 7217

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java多线程下载_java多线程下载网络资源

在java中,我们可以通过URL和HttpURLConnection实现对资源的多线程下载,以此来减少资源的下载时间,下面是一个实现多线程下载的例子,不足的是没实现断点下载的功能import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;impor...

weixin_33525298的博客 243

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java Swing实现网络资源下载工具项目源码(支持多线程下载、断点续)

Java swing实现的网络资源下载工具, 主要实现的功能有:单线程下载、多线程下载、断点续传等,此外swing还支持切换不同风格皮肤,我内置了四种皮肤可切换,感兴趣的可以自己再添加皮肤,后面有空了我可能还会继续完善这个工具的功能,例如磁力链接的解析下载,种子文件的解析下载等 Java版本:JDK 1.8 数据库:MySQL 5.7(或者官网的xampp) 数据库编译工具navicat 配套环境和环境安装视频 配套环境和环境安装视频 开发工具包 环境配置视频 部分运行截图 ...

weixin_45595607的博客 407

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java线程资源,Java之多线程下载网络资源

package com.download;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;public class Downloader {public void do...

weixin_36238073的博客 121

Android上Java网络资源访问(二)使用HttpURLConnection多线程下载

对网络访问不太了解的新手,可以先看一下上一篇文章对URL的简单介绍:Android上Java网络资源访问(一)使用URL类访问 1.简介  HttpURLConnection继承于URLConnection,可以访问指定网站,HttpURLConnection通过对URLConnection的封装,使开发者在使用的过程中能够更加的方便; URLConnection类可以使用上篇文章介绍的UR

wolfboy2的专栏 634

java多线程下载网络资源(支持断点续传)

package threadpic;import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; impo

u014448895的博客 488

多线程下载器(Java版本)

1.通过读取源文件多线程自动下载所有网络资源到本地硬盘2.遇到下载故障在控制台打印错误信息3.允许自定义源文件的地址,保存下载文件的目录要自动创建4.允许自定义同时下载的任务数量,不指定默认开启10个下载任务5.下载文件的文件名要与网址包含文件名保持一 致6.下载成功后在控制台输出存储路径与文件尺寸。

m0_51520179的博客 980

java 多线程下载文件

1.基本思路 2.源码 package cn.itcast.download; import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; import java.uti

小程序 1万+

JAVA通过HTTP协议下载网络文件

分享一个通过原生的Java代码下载网络资源文件方法,使用URL类连接上网络服务器通过多线程使用I/O流的方式下载文件。原文链接:https://blog.youkuaiyun.com/m0_60499221/article/details/128531947。版权声明:本文为优快云博主「邻家小妹妹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。下载线程与服务器建立连接,获取到对应的I/O流,将传入的字节写入到下载的本地文件中。启动下载任务线程,传入线程号等参数。

chuyouyinghe的专栏 2165

Java 多线程下载学习资料

Java 多线程下载学习资料 生活中我们会遇到学习热情高涨而又苦于在线视频学习资料加载缓慢的问题。这或多或少会阻碍我们的学习热情。如果有一种方法能够让我们把网页上的学习视频下载下来,相比就可以极大地缓解这个矛盾。 具体实现 首先,我们要导入一个 org.apache.commons.io.FileUtils 包。 然后,创建线程。注意某P字网站视频右击Copy Video Url 返回的是学习资料的网页。(亲测)如果要下载真正的学习资料。我采用的是IDM下载提供的视频URL。 Thread1.java pa

Chang_Chen的博客 929

STM32国产替代实战:从GD32到MM32的迁移与踩坑记录

在嵌入式开发中,MCU选型常受供货与成本影响,STM32、GD32、MM32等微控制器的兼容性与迁移成为关键。其原理在于内核架构、外设寄存器及工具链的差异,直接影响代码移植效率。技术价值体现在pin-to-pin替换可缩短开发周期,降低供应链风险。应用场景涵盖工业控制、数据采集等通用领域。本文围绕STM32向MM32迁移的实操过程,对比GD32,分享外设配置、中断处理等踩坑经验,为开发者提供参考。

weixin_33782386的博客 241
上一篇: Android JS双向调用
下一篇: java加密技术
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值