实现文件下载的java代码

本文介绍了一个使用Java Servlet实现的文件下载功能,包括解决中文文件名乱码问题的方法,并提供了完整的代码示例。
Java代码
  1.   
  2. //这是实现下载类(servlet),具体思路代码如下:   
  3. //也可连接数据库   
  4. package com.message;   
  5.   
  6. import javax.servlet.*;   
  7. import javax.servlet.http.*;   
  8. import java.io.*;   
  9. import java.util.*;   
  10.   
  11. public class FileDownServlet extends HttpServlet {   
  12.     private static final String CONTENT_TYPE = "text/html; charset=GBK";   
  13.   
  14.     //Initialize global variables   
  15.     public void init() throws ServletException {   
  16.     }   
  17.   
  18.     //Process the HTTP Get request   
  19.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws  
  20.             ServletException, IOException {   
  21.         response.setContentType(CONTENT_TYPE);   
  22.         //得到下载文件的名字   
  23.         //String filename=request.getParameter("filename");   
  24.            
  25.         //解决中文乱码问题   
  26.         String filename=new String(request.getParameter("filename").getBytes("iso-8859-1"),"gbk");   
  27.   
  28.         //创建file对象   
  29.         File file=new File("F://book//WebRoot//"+filename);   
  30.   
  31.         //设置response的编码方式   
  32.         response.setContentType("application/x-msdownload");   
  33.   
  34.         //写明要下载的文件的大小   
  35.         response.setContentLength((int)file.length());   
  36.   
  37.         //设置附加文件名   
  38.        // response.setHeader("Content-Disposition","attachment;filename="+filename);   
  39.            
  40.         //解决中文乱码   
  41.     response.setHeader("Content-Disposition","attachment;filename="+new String   
  42.   
  43. (filename.getBytes("gbk"),"iso-8859-1"));           
  44.   
  45.         //读出文件到i/o流   
  46.         FileInputStream fis=new FileInputStream(file);   
  47.         BufferedInputStream buff=new BufferedInputStream(fis);   
  48.   
  49.         byte [] b=new byte[1024];//相当于我们的缓存   
  50.   
  51.         long k=0;//该值用于计算当前实际下载了多少字节   
  52.   
  53.         //从response对象中得到输出流,准备下载   
  54.   
  55.         OutputStream myout=response.getOutputStream();   
  56.   
  57.         //开始循环下载   
  58.   
  59.         while(k<file.length()){   
  60.   
  61.             int j=buff.read(b,0,1024);   
  62.             k+=j;   
  63.   
  64.             //将b中的数据写到客户端的内存   
  65.             myout.write(b,0,j);   
  66.   
  67.         }   
  68.   
  69.         //将写入到客户端的内存的数据,刷新到磁盘   
  70.         myout.flush();   
  71.   
  72.     }   
  73.   
  74.     //Process the HTTP Post request   
  75.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws  
  76.             ServletException, IOException {   
  77.         doGet(request, response);   
  78.     }   
  79.   
  80.     //Clean up resources   
  81.     public void destroy() {   
  82.     }   
  83. }  
//这是实现下载类(servlet),具体思路代码如下:
//也可连接数据库
package com.message;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class FileDownServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=GBK";

    //Initialize global variables
    public void init() throws ServletException {
    }

    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        //得到下载文件的名字
        //String filename=request.getParameter("filename");
        
        //解决中文乱码问题
        String filename=new String(request.getParameter("filename").getBytes("iso-8859-1"),"gbk");

        //创建file对象
        File file=new File("F://book//WebRoot//"+filename);

        //设置response的编码方式
        response.setContentType("application/x-msdownload");

        //写明要下载的文件的大小
        response.setContentLength((int)file.length());

        //设置附加文件名
       // response.setHeader("Content-Disposition","attachment;filename="+filename);
        
        //解决中文乱码
    response.setHeader("Content-Disposition","attachment;filename="+new String

(filename.getBytes("gbk"),"iso-8859-1"));        

        //读出文件到i/o流
        FileInputStream fis=new FileInputStream(file);
        BufferedInputStream buff=new BufferedInputStream(fis);

        byte [] b=new byte[1024];//相当于我们的缓存

        long k=0;//该值用于计算当前实际下载了多少字节

        //从response对象中得到输出流,准备下载

        OutputStream myout=response.getOutputStream();

        //开始循环下载

        while(k<file.length()){

            int j=buff.read(b,0,1024);
            k+=j;

            //将b中的数据写到客户端的内存
            myout.write(b,0,j);

        }

        //将写入到客户端的内存的数据,刷新到磁盘
        myout.flush();

    }

    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        doGet(request, response);
    }

    //Clean up resources
    public void destroy() {
    }
}




Java代码
  1.   
  2. //这是javabean写法 ,主要是实现和数据库连接的,如果没有连接数据库,就可直接不要这   
  3. package com;   
  4.   
  5. public class MessageBean {   
  6.  private String Message;   
  7.   
  8.  public String getMessage() {   
  9.   return Message;   
  10.  }   
  11.   
  12.  public void setMessage(String message) {   
  13.   Message = message;   
  14.  }   
  15. }  
//这是javabean写法 ,主要是实现和数据库连接的,如果没有连接数据库,就可直接不要这
package com;

public class MessageBean {
 private String Message;

 public String getMessage() {
  return Message;
 }

 public void setMessage(String message) {
  Message = message;
 }
}

 

Java代码
  1. //HTML页面载入写发,也可连接数据库(案例代码也在)   
  2. <%@ page language="java" import="java.util.*,com.message.*" pageEncoding="gbk"%>   
  3. <jsp:directive.page import="com.MessageBean;"/>   
  4. <%   
  5. String path = request.getContextPath();   
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  7. %>   
  8.   
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  10. <html>   
  11.   <head>   
  12.     <base href="<%=basePath%>">   
  13.        
  14.     <title>My JSP 'book.jsp' starting page</title>   
  15.        
  16.  <meta http-equiv="pragma" content="no-cache">   
  17.  <meta http-equiv="cache-control" content="no-cache">   
  18.  <meta http-equiv="expires" content="0">       
  19.  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   
  20.  <meta http-equiv="description" content="This is my page">   
  21.  <!--   
  22.  <link rel="stylesheet" type="text/css" href="styles.css">   
  23.  -->   
  24.   
  25.   </head>   
  26.      
  27.   <body>   
  28.     <!--  <a href="java.rar">5.1下载书--java</a> <br>-->   
  29.     <%   
  30.   //Vector vv=(Vector)session.getAttribute("message");   
  31.   //for(int i=0;i<vv.size();i++){   
  32.    // MessagesBean mb=(MessagesBean)vv.get(i);   
  33.    // out.println("<tr>");   
  34.    // out.println("<td>"+mb.getSender()+"</td>");   
  35.    // out.println("<td>"+mb.getMess_time()+"</td>");   
  36.    // out.println("<td>"+mb.getGeter()+"</td>");   
  37.    // out.println("<td>"+mb.getMess_content()+"</td>");   
  38. String filename=null;   
  39. session.setAttribute("java.rar",filename);   
  40.     //取得文件名   
  41.    // filename=getFilepath().substring(mb.getFilepath().lastIndexOf("/")+1);   
  42.     out.println("<td><a href=FileDownServlet?filename=java.rar>5.1下载书--java</a></td>");//java.rar这个可以改成变量   
  43.     out.println("<td><a href=FileDownServlet?filename=dos.rar>dos视频教程</a></td>");   
  44.     out.println("<td><a href=FileDownServlet?filename=常用DOS命令.rar>常用DOS命令</a></td>");   
  45.     out.println("</tr>");   
  46.  // }   
  47.   %>   
  48.   </body>   
  49. </html>  
//HTML页面载入写发,也可连接数据库(案例代码也在)
<%@ page language="java" import="java.util.*,com.message.*" pageEncoding="gbk"%>
<jsp:directive.page import="com.MessageBean;"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'book.jsp' starting page</title>
    
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
  
  <body>
    <!--  <a href="java.rar">5.1下载书--java</a> <br>-->
    <%
  //Vector vv=(Vector)session.getAttribute("message");
  //for(int i=0;i<vv.size();i++){
   // MessagesBean mb=(MessagesBean)vv.get(i);
   // out.println("<tr>");
   // out.println("<td>"+mb.getSender()+"</td>");
   // out.println("<td>"+mb.getMess_time()+"</td>");
   // out.println("<td>"+mb.getGeter()+"</td>");
   // out.println("<td>"+mb.getMess_content()+"</td>");
String filename=null;
session.setAttribute("java.rar",filename);
    //取得文件名
   // filename=getFilepath().substring(mb.getFilepath().lastIndexOf("/")+1);
    out.println("<td><a href=FileDownServlet?filename=java.rar>5.1下载书--java</a></td>");//java.rar这个可以改成变量
    out.println("<td><a href=FileDownServlet?filename=dos.rar>dos视频教程</a></td>");
    out.println("<td><a href=FileDownServlet?filename=常用DOS命令.rar>常用DOS命令</a></td>");
    out.println("</tr>");
 // }
  %>
  </body>
</html>

 

Java代码
  1. //这是web.xml配置文件,这很重要,不然,很难实现哦   
  2. <?xml version="1.0" encoding="UTF-8"?>   
  3. <web-app version="2.4"    
  4.  xmlns="http://java.sun.com/xml/ns/j2ee"    
  5.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  6.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  7.  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
  8.   <servlet>   
  9.     <description>This is the description of my J2EE component</description>   
  10.     <display-name>This is the display name of my J2EE component</display-name>   
  11.     <servlet-name>FileDownServlet</servlet-name>   
  12.     <servlet-class>com.message.FileDownServlet</servlet-class>   
  13.   </servlet>   
  14.   
  15.   <servlet-mapping>   
  16.     <servlet-name>FileDownServlet</servlet-name>   
  17.     <url-pattern>/FileDownServlet</url-pattern>   
  18.   </servlet-mapping>   
  19. </web-app> 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值