基於Java實現批量下載網絡圖片

昨天朋友作項目遇到一個需求,須要把上千個的微博表情圖片下載到本地磁盤,並作好規範命名,塞給我一堆Json數據,讓我幫忙處理下,反正閒着也沒事幹,就幫忙寫了。(很簡單的一個功能,隨手記錄下,恰好填補下最近博客的空白)html

因爲只是方便本身的工具,就不須要什麼圖形界面了,就用Java去寫了,先看下效果圖~java

 

 

嘿嘿,忽然發現會寫程序是件好事,一千多張表情圖片要是手動下載再進行更名,非得忙個2天2夜不可。。json

好了,言歸正傳,說下代碼實現,分紅3步:數組

一、獲取Json數據網絡

二、根據Json數據所提供的圖片資源地址進行下載dom

三、分類,規範命名ide

 

先來看下Json數據格式:工具

爲了方便操做,我封裝了一個數據實體類post

 1 package com.lcw.downloadutil.domain;
 2 
 3 public class Bean {
 4 
 5     private String phrase;
 6     private String type;
 7     private String url;
 8     private Boolean hot;
 9     private Boolean common;
10     private String category;
11     private String icon;
12     private String value;
13     private String picid;
14 
15     public String getPhrase() {
16         return phrase;
17     }
18 
19     public void setPhrase(String phrase) {
20         this.phrase = phrase;
21     }
22 
23     public String getType() {
24         return type;
25     }
26 
27     public void setType(String type) {
28         this.type = type;
29     }
30 
31     public String getUrl() {
32         return url;
33     }
34 
35     public void setUrl(String url) {
36         this.url = url;
37     }
38 
39     public Boolean getHot() {
40         return hot;
41     }
42 
43     public void setHot(Boolean hot) {
44         this.hot = hot;
45     }
46 
47     public Boolean getCommon() {
48         return common;
49     }
50 
51     public void setCommon(Boolean common) {
52         this.common = common;
53     }
54 
55     public String getCategory() {
56         return category;
57     }
58 
59     public void setCategory(String category) {
60         this.category = category;
61     }
62 
63     public String getIcon() {
64         return icon;
65     }
66 
67     public void setIcon(String icon) {
68         this.icon = icon;
69     }
70 
71     public String getValue() {
72         return value;
73     }
74 
75     public void setValue(String value) {
76         this.value = value;
77     }
78 
79     public String getPicid() {
80         return picid;
81     }
82 
83     public void setPicid(String picid) {
84         this.picid = picid;
85     }
86 
87     @Override
88     public String toString() {
89         return "Bean [phrase=" + phrase + ", type=" + type + ", url=" + url + ", hot=" + hot + ", common=" + common + ", category=" + category + ", icon=" + icon + ", value=" + value + ", picid=" + picid + "]";
90     }
91 
92 }

 

而後我寫了一個工具類封裝了一些方法this

分別用來處理(網絡數據的獲取,Json數據的反序列化,對圖片資源的下載)

  1 package com.lcw.downloadutil.utils;
  2 
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.BufferedReader;
  6 import java.io.File;
  7 import java.io.FileOutputStream;
  8 import java.io.IOException;
  9 import java.io.InputStream;
 10 import java.io.InputStreamReader;
 11 import java.net.MalformedURLException;
 12 import java.net.URL;
 13 import java.util.List;
 14 
 15 import com.google.gson.Gson;
 16 import com.google.gson.reflect.TypeToken;
 17 import com.lcw.downloadutil.domain.Bean;
 18 
 19 /**
 20  * 工具類集合
 21  * 
 22  * @author Rabbit_Lee
 23  * 
 24  */
 25 public class HelpUtils {
 26     /**
 27      * 根據所提供的url地址獲取Json數據
 28      * 
 29      * @param path
 30      * @return
 31      */
 32     public String getHttpString(String path) {
 33         // 存放獲取到的數據
 34         String info = "";
 35         // 網絡請求所需變量
 36         InputStream in = null;
 37         InputStreamReader reader = null;
 38         BufferedReader bufferedReader = null;
 39         try {
 40             URL url = new URL(path);
 41             // 根據Url打開地址,以utf-8編碼的形式返回輸入流
 42             in = url.openStream();
 43             reader = new InputStreamReader(in, "utf-8");
 44             bufferedReader = new BufferedReader(reader);
 45             // 臨時接受數據變量
 46             String temp = null;
 47             while ((temp = bufferedReader.readLine()) != null) {
 48                 info += temp;
 49             }
 50             return info;
 51         } catch (MalformedURLException e) {
 52             e.printStackTrace();
 53         } catch (IOException e) {
 54             e.printStackTrace();
 55         } finally {
 56             try {
 57                 in.close();
 58                 reader.close();
 59                 bufferedReader.close();
 60             } catch (IOException e) {
 61                 e.printStackTrace();
 62             }
 63         }
 64         return null;
 65     }
 66 
 67     /**
 68      * 將所提供的Json數據反序列化成Java對象(List集合)
 69      * 
 70      * @param json
 71      * @return
 72      */
 73     public List<Bean> changeJsonToList(String json) {
 74         // 利用Gson將JSON數據反序列化成JAVA對象
 75         Gson gson = new Gson();
 76         List<Bean> beans = gson.fromJson(json, new TypeToken<List<Bean>>() {
 77         }.getType());
 78         return beans;
 79     }
 80 
 81     /**
 82      * 下載圖片,並按照指定的路徑存儲
 83      * @param bean
 84      * @param filePath
 85      */
 86     public void makeImage(Bean bean, String filePath) {
 87         // 網絡請求所需變量
 88         try {
 89             //獲取輸入流
 90             BufferedInputStream in = new BufferedInputStream(new URL(bean.getUrl()).openStream());
 91             //建立文件流
 92             File file = new File(filePath + bean.getPhrase()+".gif");
 93             BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
 94             //緩衝字節數組
 95             byte[] data = new byte[2048];
 96             int length = in.read(data);
 97             while (length != -1) {
 98                 out.write(data, 0, data.length);
 99                 length = in.read(data);
100             }
101             System.out.println("正在執行下載任務:當前正在下載圖片" + bean.getPhrase() + ".gif");
102             in.close();
103             out.close();
104         } catch (MalformedURLException e) {
105             e.printStackTrace();
106         } catch (IOException e) {
107             e.printStackTrace();
108         }
109     }
110 
111 }

上面代碼對於Json數據的處理,我用到了谷歌給咱們提供的Gson工具類

對於Gson類不懂使用的朋友能夠看下我以前寫過的一篇文章:

Gson簡要使用筆記》:http://www.cnblogs.com/lichenwei/p/3987429.html

 

接着,就是調用主類:

 1 package com.lcw.downloadutil.main;
 2 
 3 import java.util.List;
 4 
 5 import com.lcw.downloadutil.domain.Bean;
 6 import com.lcw.downloadutil.utils.HelpUtils;
 7 
 8 public class TaskMain {
 9 
10     private static final String URL = "這裏涉及到Oauth2.0的一些我的隱私數據就不給出了";
11     private static String mJsonInfo;
12 
13     public static void main(String[] args) {
14         HelpUtils helpUtils = new HelpUtils();
15         // 獲取Json數據
16         mJsonInfo = helpUtils.getHttpString(URL);
17         // 將Json數據反序列化成java對象
18         List<Bean> beans = helpUtils.changeJsonToList(mJsonInfo);
19         //循環遍歷下載圖片
20         for (int i = 0; i < beans.size(); i++) {
21             helpUtils.makeImage(beans.get(i), "C:/images/");
22         }
23 
24     }
25 
26 }

 

到這裏就完事了,有哪裏不清楚的朋友,能夠在下面文章評論交流。

做者:Balla_兔子
出處:http://www.cnblogs.com/lichenwei/本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接。正在看本人博客的這位童鞋,我看你氣度不凡,談吐間隱隱有王者之氣,往後必有一番做爲!旁邊有「推薦」二字,你就順手把它點了吧,相得準,我分文不收;相不許,你也好回來找我!

相關文章
相關標籤/搜索