Java批量寫入檔案和下載圖片的示例程式碼
阿新 • • 發佈:2020-09-17
很久沒有在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***",{ "content": "http://static.withme.cn/9a4e****",{ "content": "http://static.withme.cn/9ffdb***",{ "content": "http://static.withme.cn/da5e7db***",{ "content": "http://static.withme.cn/e6ccf3764***",{ "content": "http://static.withme.cn/73ca***",{ "content": "http://static.wi***",{ "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***",{ "content": "http://static.withme.cn/9a4e****",{ "content": "http://static.withme.cn/9ffdb***",{ "content": "http://static.withme.cn/da5e7db***",{ "content": "http://static.withme.cn/e6ccf3764***",{ "content": "http://static.withme.cn/73ca***",{ "content": "http://static.wi***",{ "content": "http://static.withme.cn/4cf7dde****","type": "pic" }],"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批量寫入和下載的資料請關注我們其它相關文章!