public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception{
File pathsavefile = new File(Download.class.getResource("/").getFile() + "../1.xls");
String fileName="data.xls";//保存窗口中显示的文件名
response.reset();
response.setContentType("APPLICATION/OCTET-STREAM");
fileName=response.encodeURL(new String(fileName.getBytes(),"UTF-8"));//转码
response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\"");
ServletOutputStream out = response.getOutputStream();
InputStream inStream=new FileInputStream(pathsavefile);
byte[] b = new byte[1024];
int len;
while((len=inStream.read(b)) >0)
out.write(b,0,len);
response.setStatus( response.SC_OK );
response.flushBuffer();
out.close();
inStream.close();
}
各位高手谁能帮我把这段代码加个注释!本人新手想写一个下载文件但是不懂这段代码的意思!各位帮个忙!
外加一句!我的这个文件是放在WEB-INF下的.xls文件(不知道有没有什么影响)帮我写一个
[code="java"]
public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception{
/*下边这一行代码的意思, 构造一个文件对象, 在web程序里 一个Java类文 件.class.getResource() 将得到 tomcat 的安装目录\webapps\ 你的项目名\WEB-INF\classes\的路径 。 在加上../1.xls 的意思是在tomcat 的安装目录\webapps\ 你的项目名\WEB-INF\下的1.xls 。
(桌面程序里有区别因为包含 package的路径。)
这个文件必须存在, 而且这个文件是作为输入流的读取源的。
*/
File pathsavefile = new File(Download.class.getResource("/").getFile() + "../1.xls");
/*保存窗口中显示的文件名 , 这是 将在浏览器输入 http://localhost:8080/你的项目名/你的那个servlet 的URL映射,将显示下载的文件名称。 同时它是作为输出流的目的源。
String fileName="data.xls";
//重新设置相应。
response.reset();
//设置内容文件的类型 一般有pdf , word execl 各有不同的设置。
response.setContentType("APPLICATION/OCTET-STREAM");
fileName=response.encodeURL(new String(fileName.getBytes(),"UTF-8"));//转码
//以附件的形式提示用户下载, 就是你在浏览器打开那个servlet 时将弹出对话框提//示你下载还是保存。
response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\"");
//得到响应的输出流 即向客户端输出信息的输出流。
ServletOutputStream out = response.getOutputStream();
InputStream inStream=new FileInputStream(pathsavefile);
byte[] b = new byte[1024];
int len;
while((len=inStream.read(b)) >0)
out.write(b,0,len);
response.setStatus( response.SC_OK );
response.flushBuffer();
out.close();
inStream.close();
}
[/code]
其实你可以建工程试一试。 一切就明了的很。
我建了工程测试没问题。这里不能传附件 我上传到我的blog里, 你可以下下来运行。
代码都有,耐心学习吧,这也太.....
[quote]外加一句!我的这个文件是放在WEB-INF下的.xls文件(不知道有没有什么影响)帮我写一个 [/quote]
File pathsavefile = new File(Download.class.getResource("/").getFile() + "../1.xls");
这个已经是取classes目录的上级文件了. 已经在WEB-INF/. 所以不影响.
附件包括 ,工程项目的文件, 和在浏览器里运行的截图, 我一起打包的。
就一个servlet 文件和我的测试文件 , 我的download.java是空文件, 那不影响运行,
主要是真实项目中download.java 这个类他要负责生成要下载的文件。
Test.java 文件的代码:
[code="java"]
package my.xia.zai;
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
String path=Download.class.getResource("/").getFile()+ "../hello.txt";
System.out.println(path);
}
}
[/code]
运行的结果是:
/D:/myeclipse7workspace/mydownload/WebRoot/WEB-INF/classes/../hello.txt
在MyServlet.java文件里。
我加了三行代码 ,
[code="java"]
pathsavefile.createNewFile(); //主要是生成一个空的1.xls文件,
System.out.println(Download.class.getResource("/").getFile());
System.out.println(Download.class.getResource("/").getFile() + "../1.xls");
[/code]
前台运行后 后台打印出的结果为。
/C:/Tomcat6/webapps/mydownload/WEB-INF/classes/
/C:/Tomcat6/webapps/mydownload/WEB-INF/classes/../1.xls
祝你成功! 我的附件将上传在《答Servlet下载文件的附件》为题目的那篇文章这里。