Java批量写入文件和下载图片的示例代码
很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来。,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点)。导出的是一个html文件。可以直接打开,排版都还在。
看了下源码,是把日记存在一个json数组里了,图片还是在服务器,利用url访问,文字是在本地了。 但是想把图片下载到本地,然后和文字对应,哪篇日记下的哪些图片。
大概是如下的json数组。 大概有几百条,分别是头像、内容:文字||内容:图片、时间。 简单明了的json结构,就想着用java遍历保存到本地。
[{ "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数组遍历。获取到的图片下载,文字写入文档。
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包:
<!-- 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>
运行结果:
保存到本地:
以上就是Java批量写入文件和下载图片的示例代码的详细内容,更多关于Java批量写入和下载的资料请关注我们其它相关文章!
赞 (0)