基于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 实现并发下载。它的主要目的是练习多线程编程,同时展示如何从网络下载文件并保存到本地。更多问题与想法欢迎分享到评论区,共同交流,共同进步!