关于java的网图下载

关于java的网图下载

我们在上篇文章中,学习到了用Thread类去创建多线程,我们本篇文章来向大家介绍一下网图下载功能,利用多线程同时下载多个图片😉

一、下载器

我们下载网络图片的时候,首先需要自己定义一个下载器,创建一个下载器的类,但是这里我们需要导入一个java包,可以用别人写好的方法直接应用。

  • commons.io.jar 针对开发IO流功能的工具类库。

  • 下载地址:http://commons.apache.org/proper/commons-io/

  • 下载好以后需要解压,解压后会看到以下内容。

在这里插入图片描述

  • 复制图片中选中的包,然后在项目目录中新建一个lib软件包🤔,将conmmons包复制粘贴进去。

在这里插入图片描述

  • 粘贴以后,可以看到还是压缩包形式的,我们右键点击lib,找到添加为库

在这里插入图片描述

  • 点击确认以后,发现刚刚复制的包可以展开了,这个时候就导入成功了。
  • 我们创建一个新的类,然后在这个类里面再写一个下载器类。
package thread;import org.apache.commons.io.FileUtils;//commons包import java.io.File;
import java.io.IOException;
import java.net.URL;public class TestThread2 {
}
//下载器
class WebDownloader{//下载方法public void downloader(String url,String name){try {FileUtils.copyURLToFile(new URL(url),new File(name));//copyURLToFile复制连接转为文件,就是下载的方法} catch (IOException e) {e.printStackTrace();System.out.println("IO异常");}}
}
  • 方法源码
public static void copyURLToFile(URL source, File destination) throws IOException {Path path = destination.toPath();PathUtils.createParentDirectories(path, new FileAttribute[0]);Objects.requireNonNull(source);PathUtils.copy(source::openStream, path, new CopyOption[]{StandardCopyOption.REPLACE_EXISTING});}

二、实现下载

我们想用多线程去下载,同时下载多个图片,所以我们下面一步一步去实现。

1、继承Thread类,重写run方法

public class TestThread2 extends Thread {@Overridepublic void run() {super.run();}
}

2、定义属性,url和name

public class TestThread2 extends Thread {private String url;//图片地址private String name;//保存名字@Overridepublic void run() {super.run();}
}

3、构造函数

public class TestThread2 extends Thread {private String url;private String name;public TestThread2(String url, String name) //ALT+INS{this.url = url;this.name = name;}@Overridepublic void run() {super.run();}
}

4、线程体

public class TestThread2 extends Thread {private String url;private String name;public TestThread2(String url, String name) {this.url = url;this.name = name;}@Overridepublic void run() {WebDownloader webDownloader = new WebDownloader();webDownloader.downloader(url,name);System.out.println("下载了文件名为:"+name);}
}class WebDownloader{//下载方法public void downloader(String url,String name){try {FileUtils.copyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("IO异常");}}
}

5、启动线程

package thread;import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.net.URL;public class TestThread2 extends Thread {private String url;private String name;public TestThread2(String url, String name) {this.url = url;this.name = name;}//下载图片线程执行体@Overridepublic void run() {WebDownloader webDownloader = new WebDownloader();webDownloader.downloader(url,name);System.out.println("下载了文件名为:"+name);}public static void main(String[] args) {TestThread2 t1 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","1.jpg");//打开网页按F12,可以查看路径TestThread2 t2 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","2.jpg");t1.start();t2.start();}
}
//下载器
class WebDownloader{//下载方法public void downloader(String url,String name){try {FileUtils.copyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("IO异常");}}
}

6、跑起来!

下载了文件名为:2.jpg
下载了文件名为:1.jpg进程已结束,退出代码为 0

我们可以看到,是先下载的2,后下载的1,下载好的图片就在项目中了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471057.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP基本概念-HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响…

算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度

实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度 线性结构: 数组:是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。 查找数据 :随机访问 流程图 /** 查询元素下标…

Linux学习(三)shell编程

1.echo指令 用于将后面的字体内容回显到控制台,将后面的字体用单引号或双引号引起来都会忽略引号 2.expr数学运算 3.第一个shell脚本 一般shell脚本以.sh为后缀,通过sh命令来执行shell脚本。 4.shell脚本的命令行参数 $1 $2 $3 $4 $5 $6 $7 $8 $9 $0 &…

【DDD】学习笔记-值对象

值对象通常作为实体的属性而存在,也就是亚里士多德提到的数量、性质、关系、地点、时间与形态等范畴。正如 Eric Evans 所说:“当你只关心某个对象的属性时,该对象便可做为一个值对象。为其添加有意义的属性,并赋予它相应的行为。…

day42 一个极简动画效果(复习相关属性)

<!DOCTYPE html> <html><head><title>动画页面</title><style>body {font-family: Arial, sans-serif;background-color: #f2f2f2;margin: 0;padding: 0;}.container {max-width: 800px;margin: 0 auto;margin-top: 100px;padding: 20px;b…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-互斥锁mux

目录 一、互斥锁基本概念二、互斥锁运行机制三、互斥锁开发流程四、互斥锁使用说明五、互斥锁接口六、代码分析&#xff08;待续...&#xff09; 一、互斥锁基本概念 互斥锁又称互斥型信号量&#xff0c;是一种特殊的二值性信号量&#xff0c;用于实现对共享资源的独占式处理。…

17.3.1.2 曝光

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 基本算法&#xff1a;先定义一个阈值&#xff0c;通常取得是128 原图像&#xff1a;颜色值color&#xff08;R&#xff0c;G&#…

读十堂极简人工智能课笔记03_遗传算法与进化

1. 寻找正确答案 1.1. 卡尔西姆斯 1.1.1. 计算机图形艺术家和研究者 1.1.2. 演示过数字进化之创造性和新颖性的先驱 1.1.3. 1994年 1.1.3.1. 创造一批能游泳、走路、跳跃&#xff0c;甚至互相竞争的虚拟动物震惊了整个科学界 1.1.3.2. 它们的人工大脑却是个极其复杂的网络…

EXCEL中如何调出“数据分析”的菜单

今天发现&#xff0c;原来WPS还是和EXCEL比&#xff0c;还是少了“数据分析”这个日常基本做统计的菜单&#xff0c;只好用EXCEL了&#xff0c;但奇怪发现我的EXCEL中没发现这个菜单&#xff0c;然后查了下&#xff0c;才发现&#xff0c;要用如下的方法打开&#xff1a; 1&…

效果炸裂!OpenAI首个视频生成模型发布,1分钟流畅高清,网友:整个行业RIP

刚刚&#xff0c;奥特曼发布OpenAI首个视频生成模型Sora。 完美继承DALLE 3的画质和遵循指令能力&#xff0c;能生成长达1分钟的高清视频。 AI想象中的龙年春节&#xff0c;红旗招展人山人海。 有紧跟舞龙队伍抬头好奇官网的儿童&#xff0c;还有不少人掏出手机边跟边拍&…

B3657 [语言月赛202209] 公园门票

题目描述 小 A 一家人一起来逛公园&#xff0c;门票价目表如下&#xff1a; 小 A 家里共有 x 个成人&#xff0c;y 个儿童&#xff0c;请问至少需要花费多少钱购买门票。 输入格式 共一行&#xff0c;包含两个数字 x 和 y&#xff0c;表示小 A 家里共有 x 名成人&#xff0c…

智慧供应链控制塔大数据解决方案

一、供应链控制塔的概念定义 (1) Gartner 的定义: “控制塔是一个物理或虚拟仪表板,提供准确的、及时的、完整的物流事件和数据,从组织和服务的内部和跨组织运作供应链,以协调所有相关活动。”、“供应链控制塔…提供供应链端到端整体可见性和近实时信息和决策的概念……