Java多线程下载网图的完整案例
作者:花伤情犹在 发布时间:2022-10-17 23:59:02
Java多线程下载网图案例
此案例依赖——文件操作工具类(FileUtils)
使用 apache 的commons-io包下的FileUtilsimportorg.apache.commons.io.FileUtils;
下载commons-io包
官方API文档
点击即可下载,然后导入IDEA的库中或者项目中。
导包
首先创建一个下载器
步骤:
1.新建一个download类
2.在类中建立一个下载方法
下载方法需要接收2个变量,一个是url下载地址,一个是name文件名称
3.在下载方法中调用文件操作工具类(FileUtils)
4.try/catch捕获异常并提示异常
方法 | 说明 |
---|---|
copyURLToFile(URL source, File destination) | 将字节从URL复制source到文件中 destination。 |
//下载器
class download{
//下载方法
public void down(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO异常,download方法出现问题");
}
}
}
然后创建一个线程类
步骤:
1.创建线程类-多线程下载器,继承Thread
类
2.定义2个私有变量(url下载地址,name文件名称)
3.创建有参数构造器(用于初始化2个私有变量的值)
4.重写Thread父类的run方法
run方法的方法体内写入要执行的任务,我们的任务就是要下载网图,因为要用到下载器里面的下载方法,所以直接实例化download类,然后调用download类中的down方法,由于down方法需要接受2个String类型的变量(url和name),直接将2个私有变量传入进去,最后给个提示,打印出下载的文件名称。
public class 多线程下载器 extends Thread{
private String url;
private String name;
public 多线程下载器(String url, String name) {
this.url = url;
this.name = name;
}
@Override
public void run() {
download download = new download();
download.down(url,name);
System.out.println("下载了名为"+name);
}
}
在main方法中创建线程并启动
步骤:
1.创建一个main方法
2.创建3个线程
创建线程的时候要传入参数,目的是调用有参构造器初始化私有变量
这里传入3个图片的地址以及文件的名称
注意文件名称,下载的文件类型要对应好相应的后缀名
多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");
3.用start开启3个线程
start方法会开启新的线程,并且在新的线程中调用线程类中的run方法
public static void main(String[] args) {
多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");
t1.start();
t2.start();
t3.start();
}
全部代码:
package 多线程;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class 多线程下载器 extends Thread{
private String url;
private String name;
public 多线程下载器(String url, String name) {
this.url = url;
this.name = name;
}
@Override
public void run() {
download download = new download();
download.down(url,name);
System.out.println("下载了名为"+name);
}
public static void main(String[] args) {
多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");
t1.start();
t2.start();
t3.start();
}
}
//下载器
class download{
public void down(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO异常,download方法出现问题");
}
}
}
运行结果:
下载的文件默认位置在项目下如图:
双击图片文件可进行查看
总结
来源:https://blog.csdn.net/qq_31762741/article/details/115258747
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 一.介绍观察者模式(Observer Pattern)属于行为型模式。定义了对象之间的一对多依赖,让多个观察者同时监听某一个主题对象,类似于
- 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变
- cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是
- 很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自
- 目录简介强引用软引用弱引用虚引用简介从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由
- 系列文章已完成,目录如下:jdk-logging log4j logback日志系统实现机制原理介绍commons-lo
- 本篇文章介绍SpringBoot的上传和下载功能。一、创建SpringBoot工程,添加依赖compile("org.spring
- 没有结果时,去.First()时,会报错,所以一定要先.Count()判断一下而用FirstOrDefault(),如果集合中没有数据,则返
- 有很多应用场景,用到了接口动态实现,下面举几个典型的应用:1、mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编
- logback-classic 使用testCompile的打包今天使用gradle打包的时候logback-classic一直打包不进去。
- 进行数据源或者 FTP 服务器等资源配置时,我们可以将这些配置信息放到一个独立的外部属性文件中,并在 Spring 配置文件中通过形如 ${
- 1.背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final s
- 项目中有这样一个需求,网页上上传了一个视频,需要获取此视频的时长、大小,把这两个数据返回给前
- 话不多说,请看代码:<!DOCTYPE html><html><head> <meta
- 本文实例讲述了java实现图片写入高清字体及带边框的方法。分享给大家供大家参考。具体实现方法如下:Graphics2D g2=image.c
- 预加载bean在springBoot启动过程中就完成创建加载在AbstractApplicationContext的refresh方法中//
- 本文实例讲述了Android实现EditText中添加和删除bitmap的方法。分享给大家供大家参考,具体如下:SpannableStrin
- 如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HT
- 前言使用SpringBoot来开发项目相对于传统模式,要快速优雅许多,相信目前国内绝大部分web项目的开发还没有使用SpringBoot来做
- 我们经常在项目开放中需要进行很多配置, 那么这些配置基本上都是动态的, 如果我直接写在代码中, 修改起来很麻烦, 如果该配置在多处进行引用啦