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

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py