Java下载文件的4种方式总结
1.以流的方式下载.
publicHttpServletResponsedownload(Stringpath,HttpServletResponseresponse){
try{
//path是指欲下载的文件的路径。
Filefile=newFile(path);
//取得文件名。
Stringfilename=file.getName();
//取得文件的后缀名。
Stringext=filename.substring(filename.lastIndexOf(".")+1).toUpperCase();
//以流的形式下载文件。
InputStreamfis=newBufferedInputStream(newFileInputStream(path));
byte[]buffer=newbyte[fis.available()];
fis.read(buffer);
fis.close();
//清空response
response.reset();
//设置response的Header
response.addHeader("Content-Disposition","attachment;filename="+newString(filename.getBytes()));
response.addHeader("Content-Length",""+file.length());
OutputStreamtoClient=newBufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
}catch(IOExceptionex){
ex.printStackTrace();
}
returnresponse;
}
2.下载本地文件
publicvoiddownloadLocal(HttpServletResponseresponse)throwsFileNotFoundException{
//下载本地文件
StringfileName="Operator.doc".toString();//文件的默认保存名
//读到流中
InputStreaminStream=newFileInputStream("c:/Operator.doc");//文件的存放路径
//设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");
//循环取出流中的数据
byte[]b=newbyte[100];
intlen;
try{
while((len=inStream.read(b))>0)
response.getOutputStream().write(b,0,len);
inStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
3.下载网络文件
publicvoiddownloadNet(HttpServletResponseresponse)throwsMalformedURLException{
//下载网络文件
intbytesum=0;
intbyteread=0;
URLurl=newURL("windine.blogdriver.com/logo.gif");
try{
URLConnectionconn=url.openConnection();
InputStreaminStream=conn.getInputStream();
FileOutputStreamfs=newFileOutputStream("c:/abc.gif");
byte[]buffer=newbyte[1204];
intlength;
while((byteread=inStream.read(buffer))!=-1){
bytesum+=byteread;
System.out.println(bytesum);
fs.write(buffer,0,byteread);
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
4.支持在线打开的方式
publicvoiddownLoad(StringfilePath,HttpServletResponseresponse,booleanisOnLine)throwsException{
Filef=newFile(filePath);
if(!f.exists()){
response.sendError(404,"Filenotfound!");
return;
}
BufferedInputStreambr=newBufferedInputStream(newFileInputStream(f));
byte[]buf=newbyte[1024];
intlen=0;
response.reset();//非常重要
if(isOnLine){//在线打开方式
URLu=newURL("file:///"+filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition","inline;filename="+f.getName());
//文件名应该编码成UTF-8
}else{//纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition","attachment;filename="+f.getName());
}
OutputStreamout=response.getOutputStream();
while((len=br.read(buf))>0)
out.write(buf,0,len);
br.close();
out.close();
}
JAVA中批量下载文件,将下载多个文件打包成zip文件下载。
//批量文件下载(将多个文件打包成zip包下载)
publicstaticvoidbatchDownLoadFile(HttpServletRequestrequest,HttpServletResponseresponse,Stringfilename,String[]filepath,String[]documentname,Stringloginname){
byte[]buffer=newbyte[1024];
Datedate=newDate();
//生成zip文件存放位置
StringstrZipPath=Constant.exportAddress+loginname+date.getTime()+".zip";
Filefile=newFile(Constant.exportAddress);
if(!file.isDirectory()&&!file.exists()){
//创建单层目录
//f.mkdir();
//创建多层目录
file.mkdirs();
}
try{
ZipOutputStreamout=newZipOutputStream(newFileOutputStream(strZipPath));
//需要同时下载的多个文件
for(inti=0;i0){
out.write(buffer,0,len);
}
out.closeEntry();
fis.close();
}
out.close();
PublicMethod.downLoadFile(request,response,strZipPath,filename+".zip");
Filetemp=newFile(strZipPath);
if(temp.exists()){
temp.delete();
}
}catch(Exceptione){
System.out.println("文件下载错误");
}
}
总结
到此这篇关于Java下载文件的4种方式的文章就介绍到这了,更多相关Java下载文件内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!