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下载文件客户端和上传文件客户端实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!