加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

基于Java实现批量下载网络图片 Gson简要使用笔记

发布时间:2021-07-06 06:04:31 所属栏目:大数据 来源: https://www.jb51.cc
导读:昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆Json数据,让我帮忙处理下,反正闲着也没事干,就帮忙写了。(很简单的一个功能,随手记录下,刚好填补下最近博客的空白) 由于只是方便自己的工具,就不

昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆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_兔子
出处:http://www.cnblogs.com/lichenwei/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读