java多线程下载网络图片

时间:2022-05-19 20:30:43

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ImageDown {
 /**
  * 下载图片
  * @param str
  */
 public static void downImage(String str) {
  BufferedInputStream input = null;
  BufferedOutputStream out = null;
  URL url;
  try {
   url = new URL(str);
   URLConnection conn;
   conn = url.openConnection();
   String[] strName = str.split("/");
   String imageName = strName[strName.length - 1]; // 图片名
   String imageUrl = "D:/" + imageName;
   InputStream in = conn.getInputStream();
   input = new BufferedInputStream(in);
   out = new BufferedOutputStream(new FileOutputStream(imageUrl));
   int len = 0;
   while ((len = input.read()) != -1) {
    out.write(len);
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    try {
     out.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }

if (input != null) {
    try {
     input.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
 
 
 
 /**
  * 获取路径
  * @return
  */
 public static ArrayList<String> getUrl(){
  ArrayList<String> list= new ArrayList<String>();
  BufferedReader read=null;
  try {
   URL url = new URL("http://www.tupianzj.com/chuangyi/");
   URLConnection conn = url.openConnection();
   InputStream input = conn.getInputStream();
   read = new BufferedReader(new InputStreamReader(input));//字符转换成字节
   //http://img.tupianzj.com/uploads/allimg/160525/9-1605251F6280-L.jpg
   Pattern pattern = Pattern.compile("http://\\w+\\.\\w+\\.com/\\w+/\\w+/\\d+/[0-9]-(\\w+\\d+|\\d+\\w+)([-][A-Z]\\.jpg|\\.jpg)");
   String str=null;
   while((str=read.readLine())!=null){
    Matcher match = pattern.matcher(str);
    if (match.find()) {
     String imageUrl = match.group();
     list.add(imageUrl);
    }
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }catch (IOException e) {
   e.printStackTrace();
  }finally{
   if (read!=null) {
    try {
     read.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
  return list;
 }
}

/**
 * 开启多线程
 * @author Administrator
 *
 */
class downimage extends Thread{
 String str;
 public downimage(String str){
  this.str=str;
 }
 @Override
 public void run() {
  BufferedInputStream input = null;
  BufferedOutputStream out = null;
  URL url;
  try {
   url = new URL(str);
   URLConnection conn;
   conn = url.openConnection();
   String[] strName = str.split("/");
   String imageName = strName[strName.length - 1]; // 图片名
   String imageUrl = "D:/" + imageName;
   InputStream in = conn.getInputStream();
   input = new BufferedInputStream(in);
   out = new BufferedOutputStream(new FileOutputStream(imageUrl));
   int len = 0;
   while ((len = input.read()) != -1) {
    out.write(len);
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    try {
     out.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (input != null) {
    try {
     input.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}

java多线程下载网络图片的更多相关文章

  1. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  2. java多线程下载和断点续传

    java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...

  3. java 多线程下载功能

    import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...

  4. java 多线程下载文件 以及URLConnection和HttpURLConnection的区别

    使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...

  5. Java多线程下载文件

    package com.test.download;   import java.io.File; import java.io.InputStream; import java.io.RandomA ...

  6. Java多线程下载器FileDownloader(支持断点续传、代理等功能)

    前言 在我的任务清单中,很早就有了一个文件下载器,但一直忙着没空去写.最近刚好放假,便抽了些时间完成了下文中的这个下载器. 介绍 同样的,还是先上效果图吧. Jar包地址位于 FileDownload ...

  7. Java多线程下载初试

    一.服务端/客户端代码的实现 服务端配置config @ConfigurationProperties("storage") public class StoragePropert ...

  8. java 多线程下载文件并实时计算下载百分比(断点续传)

    多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...

  9. java多线程下载文件和断点下载

    多线程,断点下载文件 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; impor ...

随机推荐

  1. ShellExecuteA

    //第三个参数是指令,可以是一个可执行程序(后面不能加参数).有默认打开方式的文件.路径.网址.各种协议地址如迅雷ftp邮箱ed2k等 MessageBoxA

  2. next&lowbar;permutation 和 一个不成功的案例

    一个失败的案例:(POJ 1009) 题目描述 小翔同学的宿舍WIFI添加了密码,密码每天都会变更.而小翔每天都会给蹭网的同学们提供密码提示.现在请你根据密码提示,编写程序破译密码. 已知密码提示给出 ...

  3. zoj 3757 Alice and Bob and Cue Sports 模拟

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3757 #include<cstdio> #incl ...

  4. php array&lowbar;combine 把array的默认键改成指定的字符串

    array(2) { [0] => array(6) { [0] => string(1) "1" [1] => string(10) "1470650 ...

  5. Android bitmap序列化

    最近在开发中需要用到图片bitmap的序列化并进行传递,发现bitmap是没有序列化的,下面是自己实现的一个序列化方法,分享下. 以下是通过byte[]来进行序列化的,因为bitmap是没有序列化的, ...

  6. HTML&sol;CSS 常用单词整理

    页面布局(layout) header 头部/页眉: index 首页/索引: logo 标志: nav/sub_nav 导航/子导航: banner 横幅广告: main/content 主体/内容 ...

  7. Vux项目搭建

    1.快速搭建项目模板 因为项目使用vux,所以推荐使用vux官网的airyland/vux2 模板,vue-cli工具是vue项目的搭建脚手架 默认为 webpack2 模板,如果你需要使用webpa ...

  8. 用python进行wifi密码生成

    随着无线网络的不断发展,几乎所有场合都会覆盖WIFI信号,无论是公共地点还是家庭之中.众所周知,目前WIFI普遍的认证方式为wpa2,这种认证方式安全性相当不错,但由于人们设置密码时的随意性和固有思维 ...

  9. 路径问题 :&lt&semi;c&colon;url &gt&semi;的作用

    最近的项目一直报这样的错 可是本地启动 又没问题,xshell查看日志 没有错误日志,找了好久都没想到错误原因.一位大佬几分钟就找到原因了有点扎心. 首先说一下解决问题的思路.首先报错是4开头,说明是 ...

  10. vue学习笔记-初始化一个vue项目&lpar;1&rpar;

    1.cnpm install -g vue-cliUsage:vue init <template-name> <project-name> 2.我们一般使用webpack模版 ...