前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java批量写入文件和下载图片

Java批量写入文件和下载图片

作者头像
sunonzj
发布2022-06-21 13:07:31
1.4K0
发布2022-06-21 13:07:31
举报
文章被收录于专栏:zjblogzjblog

很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来。,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点)。导出的是一个html文件。可以直接打开,排版都还在。

看了下源码,是把日记存在一个json数组里了,图片还是在服务器,利用url访问,文字是在本地了。 但是想把图片下载到本地,然后和文字对应,哪篇日记下的哪些图片。

大概是如下的json数组。 大概有几百条,分别是头像、内容:文字||内容:图片、时间。 简单明了的json结构,就想着用java遍历保存到本地。

代码语言:javascript
复制
[{
	"avatar": "http://static.withme.cn/585****",
	"blocks": [{
		"content": "今天天气不错******",
		"type": "text"
	}, {
		"content": "http://static.withme.cn/84ac***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/5af2c***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/9a4e****",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/9ffdb***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/da5e7db***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/e6ccf3764***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/73ca***",
		"type": "pic"
	}, {
		"content": "http://static.wi***",
		"type": "pic"
	}, {
		"content": "http://static.withme.cn/4cf7dde****",
		"type": "pic"
	}],
	"dateStr": "2018-09-03",
	"timeStr": "18:59:41"
},{...},...]

将json数组格式化确保正确然后转成json数组遍历。获取到的图片下载,文字写入文档。

代码语言:javascript
复制
 public static void main(String[] args) {
        CloseableHttpClient client = null;
        JSONArray jsonArray = JSONArray.parseArray(
            "[{
				"avatar": "http://static.withme.cn/585****",
				"blocks": [{
					"content": "今天天气不错******",
					"type": "text"
				}, {
					"content": "http://static.withme.cn/84ac***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/5af2c***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/9a4e****",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/9ffdb***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/da5e7db***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/e6ccf3764***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/73ca***",
					"type": "pic"
				}, {
					"content": "http://static.wi***",
					"type": "pic"
				}, {
					"content": "http://static.withme.cn/4cf7dde****",
					"type": "pic"
				}],
				"dateStr": "2018-09-03",
				"timeStr": "18:59:41"
			},{...},{...},...]");

        try {
            for (int m = 0; m < jsonArray.size(); m++) {
                JSONObject jsonPas = jsonArray.getJSONObject(m);
                JSONArray array = JSONArray.parseArray(jsonPas.get("blocks").toString());
                String time = jsonPas.get("dateStr").toString();
                for (int j = 0; j < array.size(); j++) {
                    JSONObject jsPas = array.getJSONObject(j); // 遍历 jsonarray 数组,把每一个对象转成 json 对象
                    if (jsPas.get("type").equals("text")) {
                        FileWriter fileWriter = null;
                        try {
                            String filePath = "f:/13/" + time;
                            File dir = new File(filePath);
                            // 检查放置文件的文件夹路径是否存在,不存在则创建
                            if (!dir.exists()) {
                                dir.mkdirs();// mkdirs创建多级目录
                            }
                            File checkFile = new File(filePath + "/text" + time + "-" + j + ".txt");
                            // 检查目标文件是否存在,不存在则创建
                            if (!checkFile.exists()) {
                                checkFile.createNewFile();// 创建目标文件
                            }
                            // FileWriter(File file, boolean append),append为true时为追加模式,false或缺省则为覆盖模式
                            fileWriter = new FileWriter(checkFile, true);
                            String url = jsPas.get("content").toString();
                            // 向目标文件中写入内容
                            fileWriter.append(url);
                            fileWriter.flush();
                            System.out.println("写入成功!!");
                        } catch (IOException e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                fileWriter.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    if (jsPas.get("type").equals("pic")) {
                        client = HttpClients.createDefault();
                        String url = jsPas.get("content").toString();
                        String path = "f:/13/" + time;
                        // System.out.println(jsPas.get("content"));
                        httpGetImg(client, url, path + "/pic" + time + "-" + j + ".jpg");
                        System.out.println("ok");
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 发送get请求, 下载图片
     * 
     * @param url 路径
     * @return
     */
    public static void httpGetImg(CloseableHttpClient client, String imgUrl, String savePath) {
        // 发送get请求
        HttpGet request = new HttpGet(imgUrl);
        // 设置请求和传输超时时间
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000).build();
        // 设置请求头
        request.setHeader("User-Agent",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1");
        request.setConfig(requestConfig);
        try {
            CloseableHttpResponse response = client.execute(request);
            if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
                HttpEntity entity = response.getEntity();
                InputStream in = entity.getContent();
                FileUtils.copyInputStreamToFile(in, new File(savePath));
                System.out.println("下载图片成功:" + imgUrl);
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            request.releaseConnection();
        }
    }

JAr包:

代码语言:javascript
复制
   <!-- apache io操作通用jar包 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
      
      <!-- httpclient 支持jar -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
           <artifactId>httpclient</artifactId>
          <version>4.3.5</version>
     </dependency>
      <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpmime</artifactId>
         <version>4.3.5</version>
      </dependency>

运行结果:

156255655683316053662.png
156255655683316053662.png

保存到本地:

156255827943559002753.png
156255827943559002753.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档