`
lythemaster
  • 浏览: 1756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java实现Http下载

 
阅读更多
转载(1)
http://java.ccidnet.com/art/3737/20071019/1247183_1.html

序言

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

  在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());
 }
}
}

分享到:
评论
1 楼 lythemaster 2011-12-12  
转载(2)
http://www.iteye.com/problems/22114

相关推荐

    java 实现 http 下载

    通过java代码实现http下载文件,代码中有实例可供参考。

    java实现下载例子

    在Java编程语言中,开发人员...这是一个基础的下载服务实现,适用于小规模应用,但实际生产环境中可能需要更复杂的安全性和错误处理机制。例如,使用预检查防止非法文件路径,或者使用Servlet而非JSP进行更高效的处理。

    java实现模板下载功能

    通过上述分析可以看出,利用Java技术栈实现模板下载功能主要涉及前端页面设计、后端处理逻辑以及中间的HTTP协议交互。在实际开发中还需要注意对异常情况的处理,比如文件不存在、编码错误等问题,并且可以考虑增加...

    java实现 上传和下载

    在Java编程语言中,文件上传和下载是网络应用中常见的功能,特别是在Web应用程序中。这里,我们将深入探讨如何实现这两个核心操作,以及相关的技术、工具和最佳实践。 首先,文件上传通常涉及到用户通过Web表单将...

    ajax实现java文件下载

    本话题将详细探讨如何通过Ajax实现Java文件的下载,并介绍相关的核心概念和技术。 1. **Ajax**(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript...

    Java实现HTTP文件下载

    根据给定的文件信息,以下是对“Java实现HTTP文件下载”的详细知识点解析: ### Java实现HTTP文件下载 #### 核心概念与流程 在互联网环境中,我们经常需要从远程服务器下载资源,这些资源通常通过URL(Uniform ...

    Java 实现的断点下载

    在Java中,实现断点下载主要涉及到以下几个关键知识点: 1. 文件流操作:Java的`java.io`包提供了多种流类,如`FileInputStream`和`FileOutputStream`,用于读写本地文件。在断点下载中,我们需要使用`...

    用JAVA实现远程图片批量下载

    ### 使用JAVA实现远程图片批量下载的关键技术点 #### 一、引言 随着互联网的快速发展,用户对于网络资源的需求越来越多样化。其中,批量下载图片的需求尤为显著,尤其是在处理网络相册、电子书籍等内容时。传统的...

    用Java实现HTTP文件队列下载.pdf

    【Java实现HTTP文件队列下载】技术讲解 在互联网上,高效地下载大量分块存储的资源是一项常见的需求。本文将详细介绍如何使用Java语言实现HTTP文件的队列下载功能,帮助开发者解决批量下载的问题。 1. **基础知识*...

    2022年用Java实现HTTP文件队列下载Java教程.docx

    【Java实现HTTP文件队列下载】教程 在2022年的互联网环境下,高效地下载大量分散的HTTP文件成为了一项必要的技能。本教程将详细讲解如何使用Java语言实现HTTP文件队列下载,以解决手动下载数百乃至数千个文件的难题...

    Java实现HTTP连接与浏览,Java源码下载

    本教程将深入探讨如何使用Java实现这一功能,并提供相关的源码下载,帮助开发者更好地理解和实践。 首先,我们要知道在Java中,我们通常使用`java.net.URL`类来表示一个网络资源的统一资源定位符,`java.net....

    java实现图片下载和上传.zip

    以上就是关于“java实现图片下载和上传.zip”项目中的核心知识点,包括Spring、SpringMVC、MyBatis、Commons-FileUpload和Commons-IO的使用,以及在实际应用中需要考虑的安全性和性能优化措施。通过这些技术,开发者...

    java实现下载功能

    在Java编程环境中,实现一...综上所述,实现一个Java下载功能涵盖了网络编程、HTTP通信、IO流操作、多线程、用户界面设计以及异常处理等多个核心编程概念。每个环节都需要仔细设计和实现,以确保功能的完整性和稳定性。

    Java实现文件下载

    在提供的"Java实现HTTP文件下载_(转载).txt"文件中,可能包含了具体的示例代码或进一步的解释。通过阅读和理解这份文档,开发者可以更好地掌握Java文件下载的实现技巧。在实际应用中,可以根据项目需求进行相应的...

    java 实现断点下载源码

    这个Java实现的断点下载源码提供了这样的功能,我们可以从中学到一些关键的技术点。 1. 文件分块下载: 断点下载的核心是将大文件分割成多个小块,每个块可以独立下载。在Java中,我们可以使用`RandomAccessFile`...

    Java实现文件下载功能

    ### Java实现文件下载功能 在IT领域,尤其是Web开发中,文件下载是常见的需求之一,例如用户可能需要从服务器下载各种类型的文件,如文档、图片、压缩包等。本文将详细解析如何使用Java来实现这一功能,特别是针对...

    java实现pdf上传,下载,在线预览,删除,修改等功能

    这里我们将深入探讨这些功能的实现,并结合标签`java xpdf java实现pdf`来讨论XPDF库在Java中的应用。 1. **PDF上传**: PDF上传通常涉及用户通过Web界面或API接口提交PDF文件。Java中,可以使用Apache Commons ...

    Java Socket实现的HTTP下载客户端

    1. 纯Java实现的HTTP下载客户端,不借助任何第三方库 2. 可以任意类型文件下载 3. 基于JAVA Socket编程 4. 演示了SwingUI如何通过Model更新View 5. 下载以后双击Jar就可以运行

    java使用itext实现pdf文件下载

    现在,我们转向主题,即如何在Java中实现PDF文件的下载。有两种主要的方式: 1. **通过系统路径下载**:这种方式适用于后台生成PDF后,直接保存到服务器的某个路径,然后提供URL给用户下载。以下是一个简单的示例:...

    java实现httpget和httppost请求httpclient-4.3.1.jar包

    利用httpclient-4.3.1.jar、httpcore-4.3.jar包,很简单的用java实现httpget和httppost请求。

Global site tag (gtag.js) - Google Analytics