HttpURLConnection----利用接口回调和多线程进行简单的文件下载

2024-05-27 05:08

本文主要是介绍HttpURLConnection----利用接口回调和多线程进行简单的文件下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    首先需要说明的是在这里的下载使用的是内存流,所以每次下载的数据不宜过大,只适合小文件的下载实现!
    一、我们定义一个FileDownload的工具类,继承Thread实现多线程同时下载,在工具类中,提供一个静态的构造方法( 当然,非静态也没有什么不可 )--- download ( String path , File file , CallBack callback ) ,在这个方法中,需要传入三个参数,一个是下载的路径,一个是需要存储的File路径,还有一个借口对象!在这个方法中,我们将使用HttpURLConnection获取网络文件资源,再通过获取输入流将得到的流存储到本地磁盘!
    二、在对文件的下载处理上,我们首先将得到的流下载并存入到内存当中,然后再从内存当中获取数据存到本地!
    三、在重写的run()方法中调用下载文件的方法,开辟一个新的线程通道等待下载。
    四、在main方法中创建两个文件对象,给出两个文件下载路径,开启新的线程就可以进行下载操作!一个mp3文件和一个图片文件!
   
public class TestHttpDownload {
 
public static void main(String[] args) {
File file = new File("E:/mp3/阴天.mp3");
String path = "http://42.48.1.37/ws.cdn.baidupcs.com/file/99a4e607e646121d1d22dca8020b6787?bkt=p2-qd-344&xcode=48efb5d0699a3b5c0fe59fd12e82e7bf4a84c3a1243b47750047804bae6a1ada&fid=2337020227-250528-254719956965863&time=1439988143&sign=FDTAXERLBH-DCb740ccc5511e5e8fedcff06b081203-cKzHcw0jxiQZ2gf5%2B%2F0%2Fx%2F0pmqQ%3D&to=hc&fm=Nan,B,U,nc&sta_dx=4&sta_cs=3938&sta_ft=mp3&sta_ct=7&fm2=Nanjing,B,U,nc&newver=1&newfm=1&secfm=1&flow_ver=3&sl=77135951&expires=8h&rt=sh&r=600114904&mlogid=2299306147&vuk=220819842&vbdid=1352670736&fin=%E9%98%B4%E5%A4%A9.mp3&fn=%E9%98%B4%E5%A4%A9.mp3&slt=pm&uta=0&rtype=1&iv=0&isw=0&wshc_tag=0&wsts_tag=55d479b2&wsid_tag=7139aa92&wsiphost=ipdbm";
File file1 = new File("E:/img/5.jpg");
String path1 = "http://www.keaitupian.com/uploads/090821/1_164315_1.jpg";
new FileDownload(file, path, new CallBack() {
@Override
public void result(String str) {
System.out.println(str);
}
}).start();
new FileDownload(file1, path1, new CallBack() {
@Override
public void result(String str) {
System.out.println(str);
}
}).start();
}
}
class FileDownload extends Thread{
File file = null;
String path = null;
CallBack callback = null;
public FileDownload(File file, String path,CallBack callback) {
this.file = file;
this.path = path;
this.callback = callback;
}
public static void download(String path,File file,CallBack callback){
URL url = null;
HttpURLConnection conn = null;
FileOutputStream fos = null;
try {
url = new URL(path);
conn = (HttpURLConnection) url.openConnection();
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
//成功
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
byte[] b = new byte[128];
int len = 0;
while((len = bis.read(b))!=-1){
bos.write(b,0,len);
bos.flush();
}
fos = new FileOutputStream(file);
fos.write(bos.toByteArray());
callback.result("下载"+url.getFile()+"完毕!");
fos.close();
bos.close();
bis.close();
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
download(path, file, callback);
}
}
interface CallBack{
void result(String str);
}

这篇关于HttpURLConnection----利用接口回调和多线程进行简单的文件下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006580

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构