欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java下http下載文件客戶端和上傳文件客戶端實(shí)例代碼

 更新時(shí)間:2017年12月01日 11:34:03   作者:chenyulancn  
這篇文章主要介紹了Java下http下載文件客戶端和上傳文件客戶端實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

一、下載客戶端代碼

package javadownload; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
/** 
 * @說(shuō)明 導(dǎo)出虛擬機(jī) 
 * @author wxt 
 * @version 1.0 
 * @since 
 */ 
public class GetVM { 
  /** 
   * 測(cè)試 
   * @param args 
   */ 
  public static void main(String[] args) { 
    String url = "http://192.168.5.102:8845/xx"; 
    byte[] btImg = getVMFromNetByUrl(url); 
    if(null != btImg && btImg.length > 0){ 
      System.out.println("讀取到:" + btImg.length + " 字節(jié)"); 
      String fileName = "ygserver"; 
      writeImageToDisk(btImg, fileName); 
    }else{ 
      System.out.println("沒(méi)有從該連接獲得內(nèi)容"); 
    } 
  } 
  /** 
   * 將vm 寫(xiě)入到磁盤(pán) 
   * @param vm 數(shù)據(jù)流 
   * @param fileName 文件保存時(shí)的名稱 
   */ 
  public static void writeImageToDisk(byte[] vm, String fileName){ 
    try { 
      File file = new File("./" + fileName); 
      FileOutputStream fops = new FileOutputStream(file); 
      fops.write(vm); 
      fops.flush(); 
      fops.close(); 
      System.out.println("下載完成"); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
  /** 
   * 根據(jù)地址獲得數(shù)據(jù)的字節(jié)流 
   * @param strUrl 網(wǎng)絡(luò)連接地址 
   * @return 
   */ 
  public static byte[] getVMFromNetByUrl(String strUrl){ 
    try { 
      URL url = new URL(strUrl); 
      HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
      conn.setRequestMethod("GET"); 
      conn.setConnectTimeout(5 * 1000); 
      InputStream inStream = conn.getInputStream();//通過(guò)輸入流獲取數(shù)據(jù) 
      byte[] btImg = readInputStream(inStream);//得到的二進(jìn)制數(shù)據(jù) 
      return btImg; 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
    return null; 
  } 
  /** 
   * 從輸入流中獲取數(shù)據(jù) 
   * @param inStream 輸入流 
   * @return 
   * @throws Exception 
   */ 
  public static byte[] readInputStream(InputStream inStream) throws Exception{ 
    ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
    byte[] buffer = new byte[1024]; 
    int len = 0; 
    while( (len=inStream.read(buffer)) != -1 ){ 
      outStream.write(buffer, 0, len); 
    } 
    inStream.close(); 
    return outStream.toByteArray(); 
  } 
} 

上述代碼只適合下載小文件,如果下載大文件則會(huì)出現(xiàn)  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 錯(cuò)誤,所以如果下載大文件需要對(duì)上述代碼進(jìn)行改造,代碼如下:

package javadownload; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
/** 
 * @說(shuō)明 導(dǎo)出虛擬機(jī) 
 * @author wxt 
 * @version 1.0 
 * @since 
 */ 
public class GetBigFile { 
  /** 
   * 測(cè)試 
   * @param args 
   */ 
  public static void main(String[] args) { 
    String url = "http://192.168.5.76:8080/export?uuid=123"; 
    String fileName="yserver";  
    getVMFromNetByUrl(url,fileName); 
  } 
  /** 
   * 根據(jù)地址獲下載文件 
   * @param strUrl 網(wǎng)絡(luò)連接地址 
   * @param fileName 下載文件的存儲(chǔ)名稱 
   */ 
  public static void getVMFromNetByUrl(String strUrl,String fileName){ 
    try { 
      URL url = new URL(strUrl); 
      HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
      conn.setRequestMethod("GET"); 
      conn.setConnectTimeout(5 * 1000); 
      InputStream inStream = conn.getInputStream();//通過(guò)輸入流獲取數(shù)據(jù) 
      byte[] buffer = new byte[4096]; 
      int len = 0; 
      File file = new File("./" + fileName); 
      FileOutputStream fops = new FileOutputStream(file); 
      while( (len=inStream.read(buffer)) != -1 ){ 
        fops.write(buffer, 0, len); 
      } 
      fops.flush(); 
      fops.close();   
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
} 

二、上傳文件客戶端:

package javadownload; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
public class FileUpload { 
  /** 
   * 發(fā)送請(qǐng)求 
   * 
   * @param url 
   *      請(qǐng)求地址 
   * @param filePath 
   *      文件在服務(wù)器保存路徑(這里是為了自己測(cè)試方便而寫(xiě),可以將該參數(shù)去掉) 
   * @return 
   * @throws IOException 
   */ 
  public int send(String url, String filePath) throws IOException { 
    File file = new File(filePath); 
    if (!file.exists() || !file.isFile()) { 
      return -1; 
    } 
    /** 
     * 第一部分 
     */ 
    URL urlObj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); 
    /** 
     * 設(shè)置關(guān)鍵值 
     */ 
    con.setRequestMethod("POST"); // 以Post方式提交表單,默認(rèn)get方式 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches(false); // post方式不能使用緩存 
    // 設(shè)置請(qǐng)求頭信息 
    con.setRequestProperty("Connection", "close");//Keep-Alive 
    con.setRequestProperty("Charset", "UTF-8"); 
    // 設(shè)置邊界 
    String BOUNDARY = "----------" + System.currentTimeMillis(); 
    con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" 
        + BOUNDARY); 
    // 請(qǐng)求正文信息 
    // 第一部分: 
    StringBuilder sb = new StringBuilder(); 
    sb.append("--"); // ////////必須多兩道線 
    sb.append(BOUNDARY); 
    sb.append("\r\n"); 
    sb.append("Content-Disposition: form-data;name=\"file_name\";filename=\"" 
        + file.getName() + "\"\r\n"); 
    sb.append("Content-Type:application/octet-stream\r\n\r\n"); 
    sb.append("Connection:close\r\n\r\n"); 
    byte[] head = sb.toString().getBytes("utf-8"); 
    // 獲得輸出流 
    OutputStream out = new DataOutputStream(con.getOutputStream()); 
    out.write(head); 
    // 文件正文部分 
    DataInputStream in = new DataInputStream(new FileInputStream(file)); 
    int bytes = 0; 
    byte[] bufferOut = new byte[1024]; 
    while ((bytes = in.read(bufferOut)) != -1) { 
      out.write(bufferOut, 0, bytes); 
    } 
    in.close(); 
    // 結(jié)尾部分 
    byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數(shù)據(jù)分隔線 
    out.write(foot); 
    out.flush(); 
    out.close(); 
    /** 
     * 讀取服務(wù)器響應(yīng),必須讀取,否則提交不成功 
     */ 
    return con.getResponseCode(); 
    /** 
     * 下面的方式讀取也是可以的 
     */ 
    // try { 
    // // 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng) 
    // BufferedReader reader = new BufferedReader(new InputStreamReader( 
    // con.getInputStream())); 
    // String line = null; 
    // while ((line = reader.readLine()) != null) { 
    // System.out.println(line); 
    // } 
    // } catch (Exception e) { 
    // System.out.println("發(fā)送POST請(qǐng)求出現(xiàn)異常!" + e); 
    // e.printStackTrace(); 
    // } 
  } 
  public static void main(String[] args) throws IOException { 
    FileUpload up = new FileUpload(); 
    System.out.println(up.send("http://192.168.5.102:8845/xx", 
        "./vif.xml")); 
    ; 
  } 
} 

總結(jié)

以上所述是小編給大家介紹的Java下http下載文件客戶端和上傳文件客戶端實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java常用工具類 Date日期、Mail郵件工具類

    java常用工具類 Date日期、Mail郵件工具類

    這篇文章主要為大家詳細(xì)介紹了java常用工具類,包括Date日期、Mail郵件工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • IDEA配置tomcat服務(wù)器全過(guò)程

    IDEA配置tomcat服務(wù)器全過(guò)程

    這篇文章主要介紹了IDEA配置tomcat服務(wù)器全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mybatis-Plus通過(guò)SQL注入器實(shí)現(xiàn)批量插入的實(shí)踐

    Mybatis-Plus通過(guò)SQL注入器實(shí)現(xiàn)批量插入的實(shí)踐

    本文主要介紹了Mybatis-Plus通過(guò)SQL注入器實(shí)現(xiàn)批量插入的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 自己動(dòng)手寫(xiě)的mybatis分頁(yè)插件(極其簡(jiǎn)單好用)

    自己動(dòng)手寫(xiě)的mybatis分頁(yè)插件(極其簡(jiǎn)單好用)

    最近做了個(gè)項(xiàng)目,需要用到mybatis分頁(yè)功能,網(wǎng)上找了很多插件,都不太合適,于是就自己動(dòng)手寫(xiě)了個(gè)mybatis分頁(yè)插件功能,非常不錯(cuò),代碼簡(jiǎn)單易懂,需要的朋友參考下吧
    2016-11-11
  • JVM完全解讀之GC日志記錄分析

    JVM完全解讀之GC日志記錄分析

    這篇文章主要介紹了JVM完全解讀之GC日志記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-01-01
  • spring MVC中傳遞對(duì)象參數(shù)示例詳解

    spring MVC中傳遞對(duì)象參數(shù)示例詳解

    這篇文章主要給大家介紹了在spring MVC中傳遞對(duì)象參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看吧。
    2017-06-06
  • Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作

    Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作

    這篇文章主要介紹了Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    這篇文章主要介紹了關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    每次對(duì)數(shù)據(jù)進(jìn)行新增、刪除、修改時(shí)都需要對(duì)這些字段進(jìn)行設(shè)置,雖然新增時(shí)間和修改時(shí)間可以使用數(shù)據(jù)庫(kù)的時(shí)間,但是新增人和修改人就不能使用這樣的功能,下面小編給大家介紹下MyBatis-plus自動(dòng)填充功能的實(shí)例代碼,感興趣的朋友一起看看吧
    2022-01-01
  • 使用Mybatis-plus清空表數(shù)據(jù)的操作方法

    使用Mybatis-plus清空表數(shù)據(jù)的操作方法

    MyBatis 是一個(gè)基于 java 的持久層框架,它內(nèi)部封裝了 jdbc,極大提高了我們的開(kāi)發(fā)效率,文中給大家介紹了MybatisPlus常用API-增刪改查功能,感興趣的朋友跟隨小編一起看看吧
    2022-11-11

最新評(píng)論