Java多线程下载网图的完整案例

Java多线程下载网图案例

此案例依赖——文件操作工具类(FileUtils)

使用 apache 的commons-io包下的FileUtilsimportorg.apache.commons.io.FileUtils;

下载commons-io包

官方API文档

点击即可下载,然后导入IDEA的库中或者项目中。

导包

首先创建一个下载器

步骤:

1.新建一个download类

2.在类中建立一个下载方法

下载方法需要接收2个变量,一个是url下载地址,一个是name文件名称

3.在下载方法中调用文件操作工具类(FileUtils)

4.try/catch捕获异常并提示异常

方法 说明
copyURLToFile(URL source, File destination) 将字节从URL复制source到文件中 destination。
//下载器
class download{
	//下载方法
 public void down(String url,String name){
  try {
   FileUtils.copyURLToFile(new URL(url),new File(name));
  } catch (IOException e) {
   e.printStackTrace();
   System.out.println("IO异常,download方法出现问题");
  }
 }
}

然后创建一个线程类

步骤:

1.创建线程类-多线程下载器,继承Thread

2.定义2个私有变量(url下载地址,name文件名称)

3.创建有参数构造器(用于初始化2个私有变量的值)

4.重写Thread父类的run方法

run方法的方法体内写入要执行的任务,我们的任务就是要下载网图,因为要用到下载器里面的下载方法,所以直接实例化download类,然后调用download类中的down方法,由于down方法需要接受2个String类型的变量(url和name),直接将2个私有变量传入进去,最后给个提示,打印出下载的文件名称。

public class 多线程下载器 extends Thread{
  private String url;
  private String name;
  public 多线程下载器(String url, String name) {
    this.url = url;
    this.name = name;
  }

  @Override
  public void run() {
    download download = new download();
    download.down(url,name);
    System.out.println("下载了名为"+name);
  }
}

在main方法中创建线程并启动

步骤:

1.创建一个main方法

2.创建3个线程

创建线程的时候要传入参数,目的是调用有参构造器初始化私有变量

这里传入3个图片的地址以及文件的名称

注意文件名称,下载的文件类型要对应好相应的后缀名

多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");

3.用start开启3个线程

start方法会开启新的线程,并且在新的线程中调用线程类中的run方法

public static void main(String[] args) {
    多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
    多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
    多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");
    t1.start();
    t2.start();
    t3.start();
  }

全部代码:

package 多线程;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class 多线程下载器 extends Thread{
  private String url;
  private String name;
  public 多线程下载器(String url, String name) {
    this.url = url;
    this.name = name;
  }

  @Override
  public void run() {
    download download = new download();
    download.down(url,name);
    System.out.println("下载了名为"+name);
  }

  public static void main(String[] args) {
    多线程下载器 t1=new 多线程下载器("https://www.baidu.com/favicon.ico","百度.ico");
    多线程下载器 t2=new 多线程下载器("https://www.apple.com/favicon.ico","苹果.ico");
    多线程下载器 t3=new 多线程下载器("https://www.jd.com/favicon.ico","京东.ico");
    t1.start();
    t2.start();
    t3.start();
  }
}
//下载器
class download{
  public void down(String url,String name){
    try {
      FileUtils.copyURLToFile(new URL(url),new File(name));
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("IO异常,download方法出现问题");
    }
  }
}

运行结果:

下载的文件默认位置在项目下如图:

双击图片文件可进行查看

总结

到此这篇关于Java多线程下载网图的文章就介绍到这了,更多相关Java多线程下载网图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-03-28

Java多线程下载文件实例详解

本文实例为大家分享了Java多线程下载文件的具体代码,供大家参考,具体内容如下 import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class MulThreadDownload { public static void main(String[] args)

Java多线程文件分片下载实现的示例代码

多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下载后的数据组装成完整的数据文件,这样便大大加快了下载效率.常见的下载器,迅雷,QQ旋风等都采用了这种技术. 分片下载 所谓分片下载就是要利用多线程的优势,将要下载的文件一块一块的分配到各个线程中去下载,这样就极大的提高了下载速度. 技术难点 并不能说是什么难点,只能说没接触过不知道罢了. 1.如何请

Java实现多线程文件下载的代码示例

Java实现多线程文件下载思路: 1.基本思路是将文件分段切割.分段传输.分段保存. 2.分段切割用到HttpUrlConnection对象的setRequestProperty("Range", "bytes=" + start + "-" + end)方法. 3.分段传输用到HttpUrlConnection对象的getInputStream()方法. 4.分段保存用到RandomAccessFile的seek(int start)方法. 5

Java实现多线程断点下载实例代码(下载过程中可以暂停)

线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配.不难理解,如果你线程多的话,那下载的越快. 现流行的下载软件都支持多线程,且支持中途暂停下载,再次开始时不会从头开始下载. 两种功能的实现步骤如下: (1)连接到下载资源文件时,首先判断资源文件大小,同步的在本地创建一个大小相同的临时文件用于存储下载数据. (2)根据线程数量确定每个线程所需下载的文

java多线程实现文件下载

本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下 1.DownloadManager类 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Ht

Java多线程下载的实现方法

复制代码 代码如下: package cn.me.test; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * 多线程下载 * 1:使用RandomAccessFile在任意的位置写入数据. * 2:需要计算第一个线程下载的数据量,可以平均分配.如果不够平均时, *    则直接最后一个线程处理相对较少

java多线程实现下载图片并压缩

最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下载4000个左右的图片,然后压缩,下面把我的实现方式和优化过程记录下来,如果大家有什么更好的方式可以分享. 使用框架:SpringMVC 定时任务实现:继承org.springframework.scheduling.quartz.QuartzJobBean; ftp环境搭建就不说了,在其他博客记录

java多线程实现文件下载功能

多线程下载文件的思路: 1.首先获取到文件的总大小 获取文件大小的方式是通过网络读取,getContentLength()即可获取到文件的大小,使用RandomAccessFile()支持随机访问 2.根据所准备的线程数据,计算每一个线程需要下载的文件的大小 上图显示下载400M的电影分4个线程下载,每一个线程分别下载各自数据段中的数据,第一个线程下载0-100M,第二个下载100M-200M之间的数据,依次类推.因此下载过程中需要记住的是的开始位置段和结束位置段,其实只需要开始位置就可以了,结

java多线程模拟抢红包功能

今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性. /** * Created by zhanglinqiang on 2016/6/23. */ public class MyTest { public static void main(String[] args) throws InterruptedException { LinkedBlockingQueue<LuckyMoney> luckyMoneys

Java多线程中线程的两种创建方式及比较代码示例

1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应用程序运行时,java解释器为main()方法启动一个线程. 2.并行与并发: (1)并发:在单处理器系统中,多个线程共享CPU时间,而操作系统负责调度及分配资源给它们. (2)并行:在多处理器系统中,多个处理器可以同时运行多个线程,这些线程在同一时间可以同时运行,而不同于并发,只能多个线程共享CP

Java Web项目中实现文件下载功能的实例教程

需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>通过链接下载文件&

java web response提供文件下载功能的实例讲解

webapp项目的结构如下图: download.html文件的内容如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>资源下载:</h1> <p> 单纯地使用a标签时,只有浏览器不能解析的文

java实现多线程卖票功能

java多线程卖票直接先看个例子: public class SelTicketsMainTest { public static void main(String[] args) { SaleTickets1 saleTickets = new SaleTickets1(); for(int t=1;t<=3;t++) { new Thread(saleTickets).start(); } } } class SaleTickets1 implements Runnable{ private

android实现文件下载功能

android 在网络上下载文件,供大家参考,具体内容如下 步骤 : 1.使用HTTP协议下载文件 - 创建一个HttpURLConnection对象 : HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); - 获取一个InputStream对象 : urlConn.getInputStream() - 访问网络的权限 : android.permission.INTERNET 2.将下载的文件写入SDCAR

jsp文件下载功能实现代码

本文实例为大家分享了jsp实现文件下载功能的3种方法,供大家参考,具体内容如下 第一种.采用转发的方式: package cn.jbit.download.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.serv

java多线程应用实现方法

以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要了,呵呵.虽然才大二,但是也快要毕业了,要加油了. 这一篇文章主要关于java多线程,主要还是以例子来驱动的.因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,呵呵.大家可以去参考一些那些书籍.我这个文章主要关于实际的一些问题.同时也算是我以后复习的资料吧,.呵呵大家多多指教. 同时希望多结交一些技术上的朋友.谢谢. ---------------------------------------------------------