A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田建 高级黑马   /  2012-7-13 18:50  /  1536 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写的一小段关于下载的代码,能够正常下载,但是文件的名字成了类的名字,却不是我定义的文件名,不知为何,只知道是编码的问题,但不知如何解决!
  1. package cn.itcast.response;

  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.io.PrintWriter;
  8. import java.net.URLEncoder;

  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;

  13. public class ResponseDemo2 extends HttpServlet {
  14. //文件下载
  15. public void doGet(HttpServletRequest request, HttpServletResponse response)
  16. throws ServletException, IOException {
  17. String path=this.getServletContext().getRealPath("/download/书画.jpg");
  18. String name=path.substring(path.lastIndexOf("\\")+1);

  19. //如果下载文件是中文文件,则文件需要经过URL编码
  20. response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(name,"UTF-8"));
  21. InputStream in=null;
  22. OutputStream out=null;
  23. try{
  24. in=new FileInputStream(path);
  25. int len=0;
  26. byte[] buffer=new byte[1024];
  27. out=response.getOutputStream();
  28. while((len=in.read(buffer))>0){
  29. out.write(buffer,0,len);
  30. }

  31. }finally{
  32. try{
  33. if(in!=null){
  34. in.close();
  35. }
  36. }catch(IOException e){
  37. e.printStackTrace();
  38. }
  39. try{
  40. if(out!=null){
  41. out.close();
  42. }
  43. }catch(IOException e){
  44. e.printStackTrace();
  45. }

  46. }
  47. }

  48. public void doPost(HttpServletRequest request, HttpServletResponse response)
  49. throws ServletException, IOException {
  50. doGet(request,response);
  51. }
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

2 个回复

倒序浏览
保存的.java文件名必须和public修饰的公共类同名  而且一个java源文件里只能有一个public修饰的类
回复 使用道具 举报
我记得毕老师讲过如果类用public修饰的话,在通过javac命令编译时类名和文件名必须相同,如果直接class 类名,就不需要类名和文件名相同了,本人觉得应该是这个原理。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马