通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>VB编程>>正文 新版上线![旧版]
注:打开慢时请稍等

用Java实现HTTP文件队列下载

http://www.iyit.net  日期:2006-7-27 16:04:47  来源:  点击:
参加讨论

  序言

  许多用户可能会遇到这样的情况:在网站上发现一个很好的资源,但是这个资源是分成了很多个文件存放的,如果想把它保存到本地,只有靠用户点击另存来完成保存,如果资源分了几百甚至上千上万,那简直是个灾难。

  在Internet上很多的资源分成多个文件存放时,它的文件命名是有一定的规则的;正因如此,我们就可以用程序来完成这个资源的完全下载。

  1. 基础知识

  在Internet上,我们要下载网站上的某个资源,我们会获得一个URL(Uniform Resource Locator),它是一个服务器资源定位的描述,下载的过程总是如下步骤:

  • 步骤1:客户端发起连接请求一个URL
  • 步骤2:服务器解析URL,并将指定的资源返回一个输入流给客户
  • 步骤3:客户端接收输入流,将流中的内容存到文件
  2. 网络连接的建立

  Java提供了对URL访问和大量的流操作的的API,我们可以很容易的完成对网络上资源的存取,下面的代码段就完成了对一个网站的资源进行访问:

......
destUrl="http://www.ebook.com/java/网络编程001.zip";
url = new URL(destUrl); httpUrl = (HttpURLConnection) url.openConnection();
//连接指定的网络资源
httpUrl.connect();
//获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
......

  3. 代理的访问

  Java 中通过代理服务器访问外网的方法已经是世人皆知的秘密了。这里就不再多描述了,访问的Java代码如下:

//设置代理服务器
System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", "10.154.134.110");
System.getProperties().put("proxyPort", "8080");

  4. 网络资源的保存

  在上节中,我们已经获取了指定网络资源的输入流,接下来我们要完成的就是读取输入流中的所以内容,并将其保存在文件中。 示例代码:

......
fos = new FileOutputStream(fileName);
if (this.DEBUG)
 System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName +"]");
//保存文件
while ( (size = bis.read(buf)) != -1)
 fos.write(buf, 0, size); ......


  上面的示例代码就将网络资源的内容保存到了本地指定的文件中。

           

  5. 代码清单

import java.io.*;import java.net.*;import java.util.*;/** * <p>Title: 个人开发的API</p> * <p>Description: 将指定的HTTP网络资源在本地以文件形式存放</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: NewSky</p> * @author MagicLiao * @version 1.0 */public class HttpGet {  public final static boolean DEBUG = true;//调试用  private static int BUFFER_SIZE = 8096;//缓冲区大小  private Vector vDownLoad = new Vector();//URL列表  private Vector vFileList = new Vector();//下载后的保存文件名列表  /**   * 构造方法   */  public HttpGet() {  }  /**   * 清除下载列表   */  public void resetList() {    vDownLoad.clear();    vFileList.clear();  }  /**   * 增加下载列表项   *   * @param url String   * @param filename String   */  public void addItem(String url, String filename) {    vDownLoad.add(url);    vFileList.add(filename);  }  /**   * 根据列表下载资源   */  public void downLoadByList() {    String url = null;    String filename = null;        //按列表顺序保存资源    for (int i = 0; i < vDownLoad.size(); i++) {      url = (String) vDownLoad.get(i);      filename = (String) vFileList.get(i);      try {        saveToFile(url, filename);      }      catch (IOException err) {        if (DEBUG) {          System.out.println("资源[" + url + "]下载失败!!!");        }      }    }    if (DEBUG) {      System.out.println("下载完成!!!");    }  }  /**   * 将HTTP资源另存为文件   *   * @param destUrl String   * @param fileName String   * @throws Exception   */  public void saveToFile(String destUrl, String fileName) throws IOException {    FileOutputStream fos = null;    BufferedInputStream bis = null;    HttpURLConnection httpUrl = null;    URL url = null;    byte[] buf = new byte[BUFFER_SIZE];    int size = 0;        //建立链接    url = new URL(destUrl);    httpUrl = (HttpURLConnection) url.openConnection();    //连接指定的资源    httpUrl.connect();    //获取网络输入流    bis = new BufferedInputStream(httpUrl.getInputStream());    //建立文件    fos = new FileOutputStream(fileName);    if (this.DEBUG) System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName + "]");    //保存文件    while ( (size = bis.read(buf)) != -1)       fos.write(buf, 0, size);        fos.close();    bis.close();    httpUrl.disconnect();  }  /**   * 设置代理服务器   *   * @param proxy String   * @param proxyPort String   */  public void setProxyServer(String proxy, String proxyPort) {    //设置代理服务器    System.getProperties().put("proxySet", "true");    System.getProperties().put("proxyHost", proxy);    System.getProperties().put("proxyPort", proxyPort);  }  /**   * 设置认证用户名与密码   *   * @param uid String   * @param pwd String   */  public void setAuthenticator(String uid, String pwd) {    Authenticator.setDefault(new MyAuthenticator(uid, pwd));  }  /**   * 主方法(用于测试)   *   * @param argv String[]   */  public static void main(String argv[]) {    HttpGet oInstance = new HttpGet();try {//增加下载列表(此处用户可以写入自己代码来增加下载列表)oInstance.addItem("http://www.ebook.com/java/网络编程001.zip","./网络编程1.zip");oInstance.addItem("http://www.ebook.com/java/网络编程002.zip","./网络编程2.zip");oInstance.addItem("http://www.ebook.com/java/网络编程003.zip","./网络编程3.zip");oInstance.addItem("http://www.ebook.com/java/网络编程004.zip","./网络编程4.zip");oInstance.addItem("http://www.ebook.com/java/网络编程005.zip","./网络编程5.zip");oInstance.addItem("http://www.ebook.com/java/网络编程006.zip","./网络编程6.zip");oInstance.addItem("http://www.ebook.com/java/网络编程007.zip","./网络编程7.zip");//开始下载oInstance.downLoadByList();    }    catch (Exception err) {      System.out.println(err.getMessage());    }  }}

  下载源代码



           


编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:Singleton在Java中的应用
下一篇:Java编程中更新XML文档的常用方法
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
[JAVA]十四种Java开发工具点评 初学java常用开发工具介绍 Java编程中更新XML文档的常用方法
Singleton在Java中的应用 Java学习从入门到精通 4方法篇 Java学习从入门到精通 2书籍篇
Java学习从入门到精通 3过程篇 [基础知识]JAVA是什么 Java学习从入门到精通 1工具篇
[基础知识]接触 Java概述 Java服务器端编程安全必读 编写一个JAVA的队列类
Java多线程程序设计 Java数据对象JDO 2.0查询语言的特点 用Java编写通过代理访问的应用程序
Java性能优化技巧集锦 JSP不是简化的Java Java入门需掌握的30个基本概念
Java和javascript有何关系? Java学习的捷径 如何迅速成为Java高手
体验Java 1.5中面向(AOP)编程 Java中基于Aspectwerkz的AOP 2004开发技术年度综述之Java世界
最新更新 热点排行 推荐新闻
[JAVA]十四种Java开发工具点评
初学java常用开发工具介绍
Java编程中更新XML文档的常用方法
用Java实现HTTP文件队列下载
Singleton在Java中的应用
[JAVA]十四种Java开发工具点评
初学java常用开发工具介绍
Java编程中更新XML文档的常用方法
用Java实现HTTP文件队列下载
Singleton在Java中的应用
Java学习从入门到精通 4方法篇
Java学习从入门到精通 2书籍篇
Java学习从入门到精通 3过程篇
[基础知识]JAVA是什么
Java学习从入门到精通 1工具篇
[JAVA]十四种Java开发工具点评
初学java常用开发工具介绍
Java编程中更新XML文档的常用方法
用Java实现HTTP文件队列下载
Singleton在Java中的应用
编程解决注册表问题所需的函数详解
VB.NET注册表编程
盛大龙与地下城1万人内测 双核用户先行
Illustrator CS模板应用
在VB中使用注册表
微软7月将发布七款补丁 将涉及到Windo
用VB函数轻松访问系统注册表
在VB中调用API操作注册表
韩国网站FLASH效果动画源码源文件
利用WindowsAPI函数和注册表获取系统信
直接编辑VB中网格控制项的两种方法
在ASP.net中保存/取出图片入/从SQL数据
一个.net 压缩位图至JPEG的代码
制服流氓:27种恶意软件安装卸载实录
不止上网 IE地址栏的妙用
入侵中国某大型商业网站服务器全记录
IRC波特病毒出变种 黑客可远程控制电脑
传AMD与ATI合并已谈妥 对中国影响不大
金山PK网易 网游核心开发人员相互跳槽
英特尔公开与AMD翻脸 “口水战”升级
共享软件的十大破解工具推荐
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息