1. 程式人生 > 程式設計 >Java批量寫入檔案和下載圖片的示例程式碼

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***",{
    "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批量寫入檔案和下載圖片的示例程式碼

以上就是Java批量寫入檔案和下載圖片的示例程式碼的詳細內容,更多關於Java批量寫入和下載的資料請關注我們其它相關文章!