Java文件下载

本文介绍了使用Java实现文件下载的不同方法,包括本地文件下载、网络文件下载及在线打开文件的方式,并提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java文件下载的几种方式

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;
}

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();
}
}

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();
}
}

//支持在线打开文件的一种方式
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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值