Java文件下载详解
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //创建要下载的文件的对象(参数为要下载的文件在服务器上的路径)
File serverFile=new File("D:/myText.doc"); //设置要显示在保存窗口的文件名,如果文件名中有中文的话,则要设置字符集,否则会出现乱码。另外,要写上文件后缀名
String fileName=java.net.URLEncoder.encode("Java编程思想最新版.doc","utf-8");
//该步是最关键的一步,使用setHeader()方法弹出"是否要保存"的对话框,打引号的部分都是固定的值,不要改变
response.setHeader("Content-disposition","attachment;filename="+fileName); /*
* 以下四行代码经测试似乎可有可无,可能是我测试的文件太小或者其他什么原因。。。
*/
response.setContentType("application/msword");
//定义下载文件的长度 /字节
long fileLength=serverFile.length();
//把长整形的文件长度转换为字符串
String length=String.valueOf(fileLength);
//设置文件长度(如果是Post请求,则这步不可少)
response.setHeader("content_Length",length); /*
*以上内容仅是下载一个空文件
*以下内容用于将服务器中相应的文件内容以流的形式写入到该空文件中
*/
//获得一个 ServletOutputStream(向客户端发送二进制数据的输出流)对象
OutputStream servletOutPutStream=response.getOutputStream();
//获得一个从服务器上的文件myFile中获得输入字节的输入流对象
FileInputStream fileInputStream=new FileInputStream(serverFile); byte bytes[]=new byte[1024];//设置缓冲区为1024个字节,即1KB
int len=0;
//读取数据。返回值为读入缓冲区的字节总数,如果到达文件末尾,则返回-1
while((len=fileInputStream.read(bytes))!=-1)
{
//将指定 byte数组中从下标 0 开始的 len个字节写入此文件输出流,(即读了多少就写入多少)
servletOutPutStream.write(bytes,0,len);
} servletOutPutStream.close();
fileInputStream.close();
}
程序员的基础教程:菜鸟程序员
Java文件下载详解的更多相关文章
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA迭代器详解
JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
- java 泛型详解(普通泛型、 通配符、 泛型接口)
java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
随机推荐
- IE、Chrome、Firefox 三大浏览器对比
1. 代理 IE 浏览器设置代理位置在: [Internet 选项]⇒ [连接]选项卡 ⇒ [局域网设置],如下: Chrome 的代理配置界面完全同 IE,只是你设置路径在: [设置]⇒ [高级]⇒ ...
- 20155317 2016-2017-2 《Java程序设计》第8周学习总结
20155317 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口. 2.使用日志的起点是L ...
- 常量池之字符串常量池String.intern()
运行时常量池是方法区(PermGen)的一部分. 需要提前了解: 1. JVM内存模型. 2. JAVA对象在JVM中内存分配 常量池的好处 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现 ...
- python的一些基本的建议
一.编码风格 python程序要写的易于阅读 二.python代码的样式规则 遵循PEP8 4个spaces是一次缩排,不允许tabs,不允许混合使用space和tab,方法之间要有一个空行,类之间要 ...
- 使用ndk-stack来查找崩溃
logcat报错 Fatal signal 6 (SIGABRT) at 0x000025c9 (code=-6), thread 9703 (Thread-1277) 都是一些寄存器以及函数地址,真 ...
- 【转】VC++10(VS2010)IDE各种使用技巧
原文网址:http://www.cnblogs.com/sunrisezhang/articles/2802397.html 一个好的coder,他首先必须是一个熟练工.对于C++程序员来说,只有掌握 ...
- Genymotion使用分析
1.从官网下载Genymotion Genymotion官方下载地址:https://www.genymotion.com/#!/download 没有注册,先进行注册 公司规模选择个人 2.Andr ...
- 打印进度条——(progress bar才是专业的)
# 打印进度条——(progress bar是专业的) import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印 ...
- jetty之嵌入式开发
一.Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可 ...
- Spring MVC的困惑url-pattern /和/*的区别
今天在写项目时发现一个spring 总是报org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: No mapping ...