基于Java实现批量下载网络图片
昨天朋友做項目遇到一個需求,需要把上千個的微博表情圖片下載到本地磁盤,并做好規范命名,塞給我一堆Json數據,讓我幫忙處理下,反正閑著也沒事干,就幫忙寫了。(很簡單的一個功能,隨手記錄下,剛好填補下最近博客的空白)
由于只是方便自己的工具,就不需要什么圖形界面了,就用Java去寫了,先看下效果圖~
嘿嘿,突然發現會寫程序是件好事,一千多張表情圖片要是手動下載再進行改名,非得忙個2天2夜不可。。
好了,言歸正傳,說下代碼實現,分成3步:
1、獲取Json數據
2、根據Json數據所提供的圖片資源地址進行下載
3、分類,規范命名
先來看下Json數據格式:
為了方便操作,我封裝了一個數據實體類
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 }
然后我寫了一個工具類封裝了一些方法
分別用來處理(網絡數據的獲取,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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
正在看本人博客的這位童鞋,我看你氣度不凡,談吐間隱隱有王者之氣,日后必有一番作為!旁邊有“推薦”二字,你就順手把它點了吧,相得準,我分文不收;相不準,你也好回來找我!
總結
以上是生活随笔為你收集整理的基于Java实现批量下载网络图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内各IE内核浏览器所调用的IE版本--
- 下一篇: Ubuntu 中文编码设置