1. package httpclient3test;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.util.logging.Level;
  10. import java.util.logging.Logger;
  11. import org.apache.commons.httpclient.Header;
  12. import org.apache.commons.httpclient.HeaderElement;
  13. import org.apache.commons.httpclient.HttpClient;
  14. import org.apache.commons.httpclient.NameValuePair;
  15. import org.apache.commons.httpclient.methods.GetMethod;
  16.  
  17. /**
  18. * @author yan
  19. * @date 2018-3-22 13:39:22
  20. * @version V1.0
  21. * @desc
  22. */
  23. public class Httpclient3test {
  24.  
  25. public static void main(String[] args) throws IOException {
  26. HttpClient httpClient = new HttpClient();
  27. GetMethod getMethod = new GetMethod("http://android.myapp.com/android/down.jsp?appid=48157&lmid=2031&g_f=-1&actiondetail=0&softname=&downtype=1&enginekeywd=&topicid=-1&pkgid=-1");
  28.  
  29. int statusCode = httpClient.executeMethod(getMethod);
  30. System.out.println(statusCode);
  31.  
  32. //获取response的返回头信息
  33. Header contentHead = getMethod.getResponseHeader("Content-Disposition");
  34.  
  35. HeaderElement[] elements = contentHead.getElements();
  36. String filename = null;
  37.  
  38. for (HeaderElement el : elements) {
  39. //遍历,获取filename
  40. NameValuePair pair = el.getParameterByName("filename");
  41. filename = pair.getValue();
  42.  
  43. if (null != filename) {
  44. break;
  45. }
  46. }
  47.  
  48. System.out.println("filename:" + filename);
  49.  
  50. InputStream is = getMethod.getResponseBodyAsStream();
  51.  
  52. inputStream2File(is, new File("G:\\tmp\\"+filename));
  53.  
  54. getMethod.releaseConnection();
  55.  
  56. }
  57.  
  58. public static void inputStream2File(InputStream is, File file) {
  59. OutputStream os = null;
  60.  
  61. try {
  62. os = new FileOutputStream(file);
  63. int bytesRead = 0;
  64. byte[] buffer = new byte[8192];
  65. while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
  66. os.write(buffer, 0, bytesRead);
  67. }
  68. } catch (FileNotFoundException ex) {
  69. Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
  70. } catch (IOException ex) {
  71. Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
  72. } finally {
  73.  
  74. try {
  75. if (null != os) {
  76. os.close();
  77. }
  78. } catch (IOException ex) {
  79. Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
  80. } finally {
  81. if (null != is) {
  82. try {
  83. is.close();
  84. } catch (IOException ex) {
  85. Logger.getLogger(Httpclient3test.class.getName()).log(Level.SEVERE, null, ex);
  86. }
  87. }
  88. }
  89. }
  90. }
  91.  
  92. }

依赖jar包

commons-codec-1.2.jar

commons-httpclient-3.1.jar

commons-logging-1.2.jar

通过httpclient3实现文件下载以及获取文件下载名称的更多相关文章

  1. C#开发BIMFACE系列10 服务端API之获取文件下载链接

    系列目录     [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,默认场景下需要下载该源文件,下载文件一般需要知道文件的下载链接即可.BIMACE平台提供 ...

  2. Android 获取渠道名称

    直接看代码, //获取渠道名称public static String getChannelName(Activity ctx) { if (ctx == null) { return null; } ...

  3. 【转】 C# 小技巧之获取变量名称

    link: http://www.cnblogs.com/gongy/p/lm-2015-04-03.html 今天在自我规范程序设计的时候,变量名匹配字符串来自配置文件,网上找了一会儿发现也有朋友在 ...

  4. 根据UserAgent 获取操作系统名称

    /// <summary>        /// 根据 User Agent 获取操作系统名称        /// </summary>        private sta ...

  5. linux c 通过文件描写叙述符获取文件名称

    在linux中每一个被打开的文件都会在/proc/self/fd/文件夹中有记录,当中(/proc/self/fd/文件描写叙述符号:这个文件是符号文件)的文件就是文件描写叙述符所相应的文件. 而re ...

  6. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  7. Android 获取版本号名称工具类

    package com.example.grenaderose.redthunder.utils; import android.content.Context; import android.con ...

  8. MVC 获取控制器名称和Action名称(转载)

    MVC在filter中如何获取控制器名称和Action名称   使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不 ...

  9. MVC在filter中如何获取控制器名称和Action名称

    使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不影响结果. 在代码中 [AttributeUsage(Attri ...

随机推荐

  1. C#编程(六十五)----------表达式树

    表达式树 以前没听过表达式树,只听过表达式,而且听过Lambda表达式,首先介绍一下.NET里表达式树的核心概念:讲代码作为数据,他将一些代码表示为一个对象树,树中的每个节点本身都是一个表达式,不同的 ...

  2. Informix存储过程

    一.存储过程概述 存储过程是一个用户定义的函数,由存储过程语句(SPL) 和一组SQL语句组成,以可以执行代码形式存储在数据库中,和表.视图.索引等一样,是数据库的一种对象. 存储过程语言SPL(St ...

  3. pthread_join与pthread_detach细节问题

    http://www.360doc.com/content/13/0106/09/9171956_258497083.shtml pthread_t    pthr; pthread_create(& ...

  4. 解决ADB server didn't ACK问题

    ADB server didn't ACK | 浏览:7400 | 更新:2013-08-11 21:19 1 2 3 4 5 6 7 分步阅读 当我们通过eclipse开发Android应用时,会连 ...

  5. oracle exp/imp命令详解

    E:\>exp help=y 通过输入 EXP 命令和用户名/口令,您可以 在用户 / 口令之后的命令: 实例: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命 ...

  6. Java移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>

    移位运算符也针对二进制的“位”,它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>). 1.左移运算符左移运算符用“< ...

  7. 完全定制UITabBarViewController

    完全定制UITabBarViewController 效果   源码 https://github.com/YouXianMing/iOS-Project-Examples 中的 TotalCusto ...

  8. 嘻哈帝国第一季/全集Empire迅雷下载

    英文译名Empire,第1季(2015-01-08)FOX.本季看点:<嘻哈帝国>卢西奥斯·莱恩是一名超级音乐明星兼Empire娱乐公司的创始人,故事讲述了他如何在困境和失败中运营公司的故 ...

  9. Android之针对webview的缓存

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  10. client缓存机制

    一.简单介绍 client缓存机制不仅能够减轻server端的压力,同一时候也能让用户在网速较慢的情况下获取良好的用户体验. 所以构建一个优秀的APP,缓存是非常重要的一个环节. 二.处理方案 cli ...