Java下http下载文件客户端和上传文件客户端实例代码
一、下载客户端代码
packagejavadownload; importjava.io.ByteArrayOutputStream; importjava.io.File; importjava.io.FileOutputStream; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.URL; /** *@说明导出虚拟机 *@authorwxt *@version1.0 *@since */ publicclassGetVM{ /** *测试 *@paramargs */ publicstaticvoidmain(String[]args){ Stringurl="http://192.168.5.102:8845/xx"; byte[]btImg=getVMFromNetByUrl(url); if(null!=btImg&&btImg.length>0){ System.out.println("读取到:"+btImg.length+"字节"); StringfileName="ygserver"; writeImageToDisk(btImg,fileName); }else{ System.out.println("没有从该连接获得内容"); } } /** *将vm写入到磁盘 *@paramvm数据流 *@paramfileName文件保存时的名称 */ publicstaticvoidwriteImageToDisk(byte[]vm,StringfileName){ try{ Filefile=newFile("./"+fileName); FileOutputStreamfops=newFileOutputStream(file); fops.write(vm); fops.flush(); fops.close(); System.out.println("下载完成"); }catch(Exceptione){ e.printStackTrace(); } } /** *根据地址获得数据的字节流 *@paramstrUrl网络连接地址 *@return */ publicstaticbyte[]getVMFromNetByUrl(StringstrUrl){ try{ URLurl=newURL(strUrl); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5*1000); InputStreaminStream=conn.getInputStream();//通过输入流获取数据 byte[]btImg=readInputStream(inStream);//得到的二进制数据 returnbtImg; }catch(Exceptione){ e.printStackTrace(); } returnnull; } /** *从输入流中获取数据 *@paraminStream输入流 *@return *@throwsException */ publicstaticbyte[]readInputStream(InputStreaminStream)throwsException{ ByteArrayOutputStreamoutStream=newByteArrayOutputStream(); byte[]buffer=newbyte[1024]; intlen=0; while((len=inStream.read(buffer))!=-1){ outStream.write(buffer,0,len); } inStream.close(); returnoutStream.toByteArray(); } }
上述代码只适合下载小文件,如果下载大文件则会出现 Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace错误,所以如果下载大文件需要对上述代码进行改造,代码如下:
packagejavadownload; importjava.io.ByteArrayOutputStream; importjava.io.File; importjava.io.FileOutputStream; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.URL; /** *@说明导出虚拟机 *@authorwxt *@version1.0 *@since */ publicclassGetBigFile{ /** *测试 *@paramargs */ publicstaticvoidmain(String[]args){ Stringurl="http://192.168.5.76:8080/export?uuid=123"; StringfileName="yserver"; getVMFromNetByUrl(url,fileName); } /** *根据地址获下载文件 *@paramstrUrl网络连接地址 *@paramfileName下载文件的存储名称 */ publicstaticvoidgetVMFromNetByUrl(StringstrUrl,StringfileName){ try{ URLurl=newURL(strUrl); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5*1000); InputStreaminStream=conn.getInputStream();//通过输入流获取数据 byte[]buffer=newbyte[4096]; intlen=0; Filefile=newFile("./"+fileName); FileOutputStreamfops=newFileOutputStream(file); while((len=inStream.read(buffer))!=-1){ fops.write(buffer,0,len); } fops.flush(); fops.close(); }catch(Exceptione){ e.printStackTrace(); } } }
二、上传文件客户端:
packagejavadownload; importjava.io.DataInputStream; importjava.io.DataOutputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.OutputStream; importjava.net.HttpURLConnection; importjava.net.URL; publicclassFileUpload{ /** *发送请求 * *@paramurl *请求地址 *@paramfilePath *文件在服务器保存路径(这里是为了自己测试方便而写,可以将该参数去掉) *@return *@throwsIOException */ publicintsend(Stringurl,StringfilePath)throwsIOException{ Filefile=newFile(filePath); if(!file.exists()||!file.isFile()){ return-1; } /** *第一部分 */ URLurlObj=newURL(url); HttpURLConnectioncon=(HttpURLConnection)urlObj.openConnection(); /** *设置关键值 */ con.setRequestMethod("POST");//以Post方式提交表单,默认get方式 con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false);//post方式不能使用缓存 //设置请求头信息 con.setRequestProperty("Connection","close");//Keep-Alive con.setRequestProperty("Charset","UTF-8"); //设置边界 StringBOUNDARY="----------"+System.currentTimeMillis(); con.setRequestProperty("Content-Type","multipart/form-data;boundary=" +BOUNDARY); //请求正文信息 //第一部分: StringBuildersb=newStringBuilder(); 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"); //获得输出流 OutputStreamout=newDataOutputStream(con.getOutputStream()); out.write(head); //文件正文部分 DataInputStreamin=newDataInputStream(newFileInputStream(file)); intbytes=0; byte[]bufferOut=newbyte[1024]; while((bytes=in.read(bufferOut))!=-1){ out.write(bufferOut,0,bytes); } in.close(); //结尾部分 byte[]foot=("\r\n--"+BOUNDARY+"--\r\n").getBytes("utf-8");//定义最后数据分隔线 out.write(foot); out.flush(); out.close(); /** *读取服务器响应,必须读取,否则提交不成功 */ returncon.getResponseCode(); /** *下面的方式读取也是可以的 */ //try{ ////定义BufferedReader输入流来读取URL的响应 //BufferedReaderreader=newBufferedReader(newInputStreamReader( //con.getInputStream())); //Stringline=null; //while((line=reader.readLine())!=null){ //System.out.println(line); //} //}catch(Exceptione){ //System.out.println("发送POST请求出现异常!"+e); //e.printStackTrace(); //} } publicstaticvoidmain(String[]args)throwsIOException{ FileUploadup=newFileUpload(); System.out.println(up.send("http://192.168.5.102:8845/xx", "./vif.xml")); ; } }
总结
以上所述是小编给大家介绍的Java下http下载文件客户端和上传文件客户端实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!