当前位置: 首页 > news >正文

基于Java多线程实现简单图片下载

基于Java多线程实现简单图片下载

文章目录

  • 基于Java多线程实现简单图片下载
      • 1.前言
      • 2.详细实现过程
        • 2.1多线程下载
        • 2.2下载逻辑
        • 2.3主程序
        • 2.4运行流程
      • 3.实现细节
        • 3.1下载commons-io- jar包
        • 3.2 创建lib目录并导入
        • 3.3 寻找目标图片,并编写核心代码
        • 4.结果展示

在这里插入图片描述

1.前言

笔者通过这个 Java 代码实现了一个多线程图片下载程序,利用 Thread 类和 Apache Commons IO 库的 FileUtils 来从指定的 URL 下载图片并保存到本地。以下是代码的详细分析:

2.详细实现过程

2.1多线程下载
  • 程序通过继承 Thread 类创建了一个 Threadtest1 类,每个线程负责下载一张图片。
public class Threadtest1 extends Thread{private String url;private String name;public Threadtest1(String url, String name) {this.url = url;this.name = name;}@Overridepublic void run() {// super.run();应用父类的sun方法。开始下载webDownload webDownload1 = new webDownload();webDownload1.download(url,name);System.out.println("download"+name);}public static void main(String[] args) {Threadtest1 t1 = new Threadtest1("https://img.doppiocdn.com/thumbs/1746538410/196205035_webp","11.png");Threadtest1 t2 = new Threadtest1("https://missav.ai/img/mio.jpg","22.jpg");t1.start();t2.start();}
}
  • 每个 Threadtest1 实例接受一个图片的 URL 和保存的文件名作为参数。
 public static void main(String[] args) {Threadtest1 t1 = new Threadtest1("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/SOD_AKIHABARA_JACK_2023_IMG_9496.jpg/500px-SOD_AKIHABARA_JACK_2023_IMG_9496.jpg","神木丽1.png");Threadtest1 t2 = new Threadtest1("https://data.smart-flash.jp/wp-content/uploads/2023/04/08110035/kamiki1_1.jpg","神木丽2.jpg");t1.start();t2.start();}
2.2下载逻辑
  • webDownload 类的 download 方法使用 FileUtils.copyURLToFile 方法将指定 URL 的内容(图片)下载并保存为本地文件。
  • 如果下载过程中发生 IO 异常(例如网络问题或无效 URL),会捕获异常并打印错误信息,同时输出 “download fail”。
2.3主程序
  • main 方法创建了两个 Threadtest1 线程实例 t1和 t2,分别下载两张图片
  • 调用 start() 方法启动两个线程,允许它们并发执行下载任务。
2.4运行流程
  • 每个线程在 run 方法中调用 webDownload 的 download 方法执行下载。
  • 下载完成后,线程会打印 “download” 加上文件名(例如 “download 11.png”)。
  • 由于是多线程,两个图片的下载是并行进行的,具体完成顺序取决于网络状况和线程调度。
class webDownload {public void download(String url,String name) {try {FileUtils.copyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("download fail");}}
}

完整代码展示

import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.net.URL;//练习thread 实现下载图片
public class Threadtest1 extends Thread{private String url;private String name;public Threadtest1(String url, String name) {this.url = url;this.name = name;}@Overridepublic void run() {// super.run();应用父类的sun方法。开始下载webDownload webDownload1 = new webDownload();webDownload1.download(url,name);System.out.println("download"+name);}public static void main(String[] args) {Threadtest1 t1 = new Threadtest1("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/SOD_AKIHABARA_JACK_2023_IMG_9496.jpg/500px-SOD_AKIHABARA_JACK_2023_IMG_9496.jpg","神木丽1.png");Threadtest1 t2 = new Threadtest1("https://data.smart-flash.jp/wp-content/uploads/2023/04/08110035/kamiki1_1.jpg","神木丽2.jpg");t1.start();t2.start();}
}//实现下载功能 下载器
class webDownload {public void download(String url,String name) {try {FileUtils.copyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("download fail");}}
}

3.实现细节

3.1下载commons-io- jar包

下载链接https://mvnrepository.com/artifact/commons-io/commons-io/2.6

笔者是从mvn官网下载。

在这里插入图片描述

3.2 创建lib目录并导入

导入成功后,如图所示

在这里插入图片描述

3.3 寻找目标图片,并编写核心代码

找到目标图片后,右键点击“检查元素”。

在这里插入图片描述

通过箭头找到目标图片的url,并将url复制到方法参数中。

在这里插入图片描述

4.结果展示

编译通过后,结果演示如下。

如图表明成功下载目标图片,并输出图片名。

在这里插入图片描述

在这里插入图片描述

这个代码通过 Java 多线程实现了一个简单的图片下载器,利用 Thread 和 FileUtils 实现并发下载。它的主要目的是练习多线程编程,同时展示如何从网络下载文件并保存到本地。更多问题与想法欢迎分享到评论区,共同交流,共同进步!

http://www.xdnf.cn/news/309313.html

相关文章:

  • SLAM算法工程师面经大全:2025年面试真题解析与实战指南
  • 美信监控易:全栈式自主可控的底层架构优势
  • 使用 Poco C++ 库构建轻量级 HTTP 服务器
  • LeetCode 1128. 等价多米诺骨牌对的数量 题解
  • 【了解】通感算一体化网络
  • 深入理解 Web 架构:从基础到实践
  • 【大模型面试每日一题】Day 10:混合精度训练如何加速大模型训练?可能出现什么问题?如何解决?
  • 数据库复习
  • 面试常问系列(一)-神经网络参数初始化-之自注意力机制为什么除以根号d而不是2*根号d或者3*根号d
  • 最新版Google浏览器加载ActiveX控件之VLC五一节特别版
  • Marin说PCB之1000-BASE-T1的PCB设计总结--04
  • DeepSeek:突破AI搜索的无限可能
  • ProteinTools辅助探索蛋白稳定性、动态调控以及结构关系
  • 优化04-选择率和直方图
  • 意识场方程与道函数赋能的三智双融体系建构
  • Xcode16提交App Store审核时提示bitcode报错
  • vue3 computed方法传参数
  • Java泛型深度解析与电商场景应用
  • 手写Promise.all
  • USB接口的PCB设计
  • vue3在使用@import “./index.scss“报错
  • 互联网法院在NFT、元宇宙等新兴领域的规则创新
  • 江苏正力新能Verify认知能力测评笔试已通知 | SHL测评题库预测题 | 华东同舟求职讲求职
  • 园区网的发展
  • Hologres x 函数计算 x Qwen3,对接MCP构建企业级数据分析 Agent
  • 深度可分离卷积(0)
  • Linux 网络编程 day5 多路IO转接之改进select and poll
  • 【LeetCode Hot100 | 每日刷题】二叉树的层序遍历
  • MySQL 触发器(Trigger)讲解
  • OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()