Java文件下载的几种方式,具体如下:

public HttpServletResponse download(String path, HttpServletResponse response) {

try {

// path是指欲下载的文件的路径。

File file = new File(path);

// 取得文件名。

String filename = file.getName();

// 取得文件的后缀名。

String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(path));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header

response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));

response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

} catch (IOException ex) {

ex.printStackTrace();

}

return response;

}

public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {

// 下载本地文件

String fileName = "Operator.doc".toString(); // 文件的默认保存名

// 读到流中

InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径

// 设置输出的格式

response.reset();

response.setContentType("bin");

response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

// 循环取出流中的数据

byte[] b = new byte[100];

int len;

try {

while ((len = inStream.read(b)) > 0)

response.getOutputStream().write(b, 0, len);

inStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public void downloadNet(HttpServletResponse response) throws MalformedURLException {

// 下载网络文件

int bytesum = 0;

int byteread = 0;

URL url = new URL("windine.blogdriver.com/logo.gif");

try {

URLConnection conn = url.openConnection();

InputStream inStream = conn.getInputStream();

FileOutputStream fs = new FileOutputStream("c:/abc.gif");

byte[] buffer = new byte[1204];

int length;

while ((byteread = inStream.read(buffer)) != -1) {

bytesum += byteread;

System.out.println(bytesum);

fs.write(buffer, 0, byteread);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//支持在线打开文件的一种方式

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {

File f = new File(filePath);

if (!f.exists()) {

response.sendError(404, "File not found!");

return;

}

BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));

byte[] buf = new byte[1024];

int len = 0;

response.reset(); // 非常重要

if (isOnLine) { // 在线打开方式

URL u = new URL("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());

}

OutputStream out = response.getOutputStream();

while ((len = br.read(buf)) > 0)

out.write(buf, 0, len);

br.close();

out.close();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

JAVA下载文件的几_详解Java文件下载的几种实现方式相关推荐

  1. java sort 第二个参数_详解java Collections.sort的两种用法

    Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static > void sort(List list) { l ...

  2. java list for循环遍历_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  3. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  4. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  5. java遍历是什么意思_详解java中多种通用遍历方式

    下面小编就为大家带来一篇java集合遍历的几种方式总结及详细比较.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 集合类的通用遍历方式, 用迭代器迭代:Iterator ...

  6. java继承类型的用法_详解Java中使用externds关键字继承类的用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  7. java super关键字的作用_详解Java编程中super关键字的用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  8. java中的values函数_详解java 中valueOf方法实例

    case1:Object 对象转String 需要强调的是String.valueOf()方法,当参数为类型是object,且值时null的时候他的处理方式public static String v ...

  9. java使用集合存储过程_详解java调用存储过程并封装成map

    详解java调用存储过程并封装成map 发布于 2020-5-1| 复制链接 摘记: 详解java调用存储过程并封装成map           本文代码中注释写的比较清楚不在单独说明,希望能帮助到大 ...

最新文章

  1. 二维绘图引擎:圆、半圆、弧线绘制
  2. hibernate笔记--缓存机制之 一级缓存(session缓存)
  3. Java中使用JNI调用本地动态库的方法
  4. android 访问web.py,Appium 测试 Android 时,python 用例调用 Webdriver.remote 后无回应
  5. 数据结构——树的概述
  6. ddwrt php,DD-WRT官方支持设备列表_ddwrt
  7. 做数据分析,别再乱用RFM模型了!
  8. MYsql数据库练习题
  9. 80端口和443端口是什么?有什么区别?
  10. Kettle中关于多数据库链接报表或视图不存在的错误总结
  11. 2018级《程序设计基础(B)II》期末上机考试 重现--SDUT
  12. 【Docker学习笔记 一】Docker基本概念及理论基础
  13. wifi热点创建和自动连接
  14. 在线API文档、技术文档工具ShowDoc
  15. Sublime Text 3 -mac版简体中文汉化教程
  16. Threads and Locks
  17. STL之string用法详解
  18. 【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)
  19. [Win32]Win32 SDK编程系列文章——键盘输入消息
  20. mysql服务怎么启动和关闭?

热门文章

  1. CIKM'2017 最佳论文鉴赏
  2. Designing Websites for Performance 如何设计高性能网站 Lynda课程中文字幕
  3. 服务器设计系列 网络模型,网络服务器的结构模型
  4. 【微信小程序】微信开发者工具的使用
  5. GTD时间管理 | 高效能人士的工作习惯
  6. 我是一只IT小小鸟里面牛人的博客
  7. “我的代码正在被千百万人使用”,MySQL 之父等六大国际数据库掌门人谈如何做数据库!...
  8. vectorvn1610报价_VECTOR VN1610 +CANOE+CANALYZER
  9. 深度强化学习——actor-critic算法(4)
  10. IRT模型进行能力值估计