关于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 {
    @Override
    public void run() {
        super.run();
    }
}

2、定义属性,url和name

public class TestThread2 extends Thread {
    private String url;//图片地址
    private String name;//保存名字
    
    @Override
    public 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;
    }

    @Override
    public 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;
    }

    @Override
    public 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;
    }
	//下载图片线程执行体
    @Override
    public 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,下载好的图片就在项目中了。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值