基于Java实现批量下载网络图片 Gson简要使用笔记
昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆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 String type; 7 String url; 8 Boolean hot; 9 Boolean common; 10 String category; 11 String icon; 12 String value; 13 String picid; 14 15 public String getPhrase() { 16 return phrase; 17 } 18 19 void setPhrase(String phrase) { 20 this.phrase =21 22 23 String getType() { 24 type; 25 26 27 setType(String type) { 28 this.type =29 30 31 String getUrl() { 32 url; 33 34 35 setUrl(String url) { 36 this.url =37 38 39 Boolean getHot() { 40 hot; 41 42 43 setHot(Boolean hot) { 44 this.hot =45 46 47 Boolean getCommon() { 48 common; 49 50 51 setCommon(Boolean common) { 52 this.common =53 54 55 String getCategory() { 56 category; 57 58 59 setCategory(String category) { 60 this.category =61 62 63 String getIcon() { 64 icon; 65 66 67 setIcon(String icon) { 68 this.icon =69 70 71 String getValue() { 72 value; 73 74 75 setValue(String value) { 76 this.value =77 78 79 String getPicid() { 80 picid; 81 82 83 setPicid(String picid) { 84 this.picid =85 86 87 @Override 88 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 com.lcw.downloadutil.utils; 2 3 import java.io.BufferedInputStream; 4 java.io.BufferedOutputStream; 5 java.io.BufferedReader; 6 java.io.File; 7 java.io.FileOutputStream; 8 java.io.IOException; 9 java.io.InputStream; 10 java.io.InputStreamReader; 11 java.net.MalformedURLException; 12 java.net.URL; 13 java.util.List; 14 15 com.google.gson.Gson; 16 com.google.gson.reflect.TypeToken; 17 com.lcw.downloadutil.domain.Bean; 18 19 /** 20 * 工具类集合 21 * 22 * @author Rabbit_Lee 23 24 */ 25 HelpUtils { 26 27 * 根据所提供的URL地址获取Json数据 28 * 29 * @param path 30 @return 31 32 String getHttpString(String path) { 33 // 存放获取到的数据 34 String info = "" 35 网络请求所需变量 36 InputStream in = null 37 InputStreamReader reader = 38 BufferedReader bufferedReader = 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 = BufferedReader(reader); 45 临时接受数据变量 46 String temp = 47 while ((temp = bufferedReader.readLine()) != ) { 48 info += temp; 49 } 50 info; 51 } catch (MalformedURLException e) { 52 e.printStackTrace(); 53 } (IOException e) { 54 55 } finally 56 57 in.close(); 58 reader.close(); 59 bufferedReader.close(); 60 } 61 e.printStackTrace(); 62 63 } 64 return 65 66 67 68 * 将所提供的Json数据反序列化成Java对象(List集合) 69 70 json 71 72 73 public List<Bean> changeJsonToList(String json) { 74 利用Gson将JSON数据反序列化成JAVA对象 75 Gson gson = Gson(); 76 List<Bean> beans = gson.fromJson(json,new TypeToken<List<Bean>>() { 77 }.getType()); 78 beans; 79 80 81 82 * 下载图片,并按照指定的路径存储 83 bean 84 filePath 85 86 makeImage(Bean bean,String filePath) { 87 88 89 获取输入流 90 BufferedInputStream in = new BufferedInputStream( URL(bean.getUrl()).openStream()); 91 创建文件流 92 File file = new File(filePath + bean.getPhrase()+".gif" 93 BufferedOutputStream out = new BufferedOutputStream( 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 =100 101 System.out.println("正在执行下载任务:当前正在下载图片" + bean.getPhrase() + ".gif"102 in.close(); 103 out.close(); 104 } 105 106 } 107 108 109 110 111 } 上面代码对于Json数据的处理,我用到了谷歌给我们提供的Gson工具类 对于Gson类不懂使用的朋友可以看下我之前写过的一篇文章: 《Gson简要使用笔记》:http://www.cnblogs.com/lichenwei/p/3987429.html ? 接着,就是调用主类: com.lcw.downloadutil.main; 5 6 com.lcw.downloadutil.utils.HelpUtils; 7 8 TaskMain { 9 private static final String URL = "这里涉及到Oauth2.0的一些个人隐私数据就不给出了"static String mJsonInfo; 12 main(String[] args) { 14 HelpUtils helpUtils = HelpUtils(); 15 获取Json数据 16 mJsonInfo = helpUtils.getHttpString(URL); 17 将Json数据反序列化成java对象 18 List<Bean> beans = helpUtils.changeJsonToList(mJsonInfo); 19 循环遍历下载图片 for (int i = 0; i < beans.size(); i++21 helpUtils.makeImage(beans.get(i),"C:/images/"22 23 24 25 26 } ? 到这里就完事了,有哪里不清楚的朋友,可以在下面文章评论交流。 作者:Balla_兔子 ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |