案例-网图下载
1.导入common-io工具包
下载成功后:
将该文件复制到idea的一个包内:
选中lib这个包,点击右键,选择Add as Library,再点击ok即可成功再idea中导入common-io工具包:
2.编写下载器代码
其中FileUtils类只有成功导入common-io工具包才会出现,调用其中的copyURLToFile方法,将网页的图片(url:图片的网址)下载下来,保存为一个文件(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异常,download方法出现异常");
}
}
}
3.主类代码的编写
类的有参构造,用于修改成员变量url和name,重写run方法时,创建下载器对象,将url和name作为参数传入,下载网图并保存为相应文件名。
//练习thread,实现多线同步下载图片
public class PicDownLoad extends Thread {
private String url;
private String name;
public PicDownLoad(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) {
PicDownLoad t1 = new PicDownLoad("https://dgss2.bdstatic.com/5bVYsj_p_tVS5dKfpU_Y_D3/data/5da01018afc3ffb13aaf8f0e34d23f0c","2.jpg");
PicDownLoad t2 = new PicDownLoad("https://dgss2.bdstatic.com/5bVYsj_p_tVS5dKfpU_Y_D3/data/5da01018afc3ffb13aaf8f0e34d23f0c","3.jpg");
PicDownLoad t3 = new PicDownLoad("https://dgss2.bdstatic.com/5bVYsj_p_tVS5dKfpU_Y_D3/data/5da01018afc3ffb13aaf8f0e34d23f0c","4.jpg");
//三个代码同时执行
t1.start();
t2.start();
t3.start();
}
}
在主方法中创建三个PicDownLoad类的对象,代表三个线程,创建对象时的参数便是网图的地址以及所想保存成的文件名。
注:三个线程同时启动,一起运行,所以输出的顺序不只有t1,t2,t3。
以下是下载完的成果:
控制台输出下载好的文件名:
观察包处是否有刚刚下载的图片: