文档章节

java实现Http下载

notAcoder
 notAcoder
发布于 2012/09/06 20:13
字数 395
阅读 280
收藏 5
在Internet上,我们要下载网站上的某个资源,我们会获得一个URL(Uniform Resource Locator),它是一个服务器资源定位的描述,下载的过程总是如下步骤:
  步骤1:客户端发起连接请求一个URL 
       步骤2:服务器解析URL,并将指定的资源返回一个输入流给客户 

      步骤3:客户端接收输入流,将流中的内容存到文件 

先下面是一个小小的例子:

package com.hu.down;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class DownFile {

	public final static boolean DEBUG = true; //调试用
    private static int BUFFER_SIZE = 1024; //缓冲区大小
    
    public void saveToFile(String destUrl){
    	
        BufferedInputStream bis = null;
        HttpURLConnection httpUrl = null;
        URL url = null;
        byte[] buf = new byte[BUFFER_SIZE];
        
        try {
			url = new URL(destUrl);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			System.out.println(destUrl+"资源URL语法错误,请检查字符串是否正确!");
			return;
		}
        try {
			httpUrl = (HttpURLConnection) url.openConnection();
		} catch (IOException e) {
			System.out.println("打开到 "+destUrl+"所引用的远程对象的连接失败");
		}
        
        try {
			httpUrl.connect();
		} catch (IOException e) {
			System.out.println("打开到此 "+destUrl+" 引用的资源的通信链接失败");
			return;
		}
        
        
        try {
			bis = new BufferedInputStream(httpUrl.getInputStream());
		} catch (IOException e) {
			System.out.println("取得连接的Input流失败");
			return;
		}
        
        File file = new File("D:/upload" + destUrl.substring(destUrl.lastIndexOf("/")));
        
        BufferedOutputStream fileOut=null;
		try {
			fileOut = new BufferedOutputStream(new FileOutputStream(file));
		} catch (FileNotFoundException e) {
			System.out.println(file+"在本地保存文件失败");
			e.printStackTrace();
		}
        try{
        	while (true) {
                int bytesIn = bis.read(buf, 0, 1024);
                if (bytesIn == -1) {
                   break;
                } else {
                   fileOut.write(buf, 0, bytesIn);
                }
             }
             
             fileOut.flush();
             fileOut.close();
        }catch(Exception ee){
        	System.out.println(file+"保存文件过程失败");
        }
		
         System.out.println(file.getAbsolutePath()+"下载完毕");
        
    }
	public static void main(String[] args) throws IOException {
		DownFile d=new DownFile();
		String youclass="11003080";
		String baseUrl="http://photo/"+youclass;
		for(int i=301;i<=340;i++)
		{			
			d.saveToFile(baseUrl+i+".jpg");
		}
	}

}


© 著作权归作者所有

notAcoder
粉丝 5
博文 30
码字总数 12671
作品 0
巴南
架构师
私信 提问
说说如何通过 JNDI 让 Tomcat 使用 Druid 连接池

JNDI(Java Naming and Directory Interface,Java 命名和目录接口 ) 是 SUN 公司提供的一种标准的 Java 命名系统接口, 它提供了统一的客户端 API ,通过不同的访问者来实现 JNDI 服务供应接口...

deniro
07/21
0
0
open jdk 各版本源码及下载地址

java 8 源代码地址:http://jdk.java.net/8/ windows 下载地址: http://download.java.net/java/jdk8u162/archive/b01/binaries/jdk-8u162-ea-bin-b01-windows-i586-04oct2017.exe http://d......

Ryan-瑞恩
2017/11/10
205
0
java学习从入门到精通(原创)--精华

作者:robbin 网址:http://www.fankai.com/ Java Learning Path (一)、工具篇 一、 JDK (Java Development Kit) JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),...

精华之王
2009/04/11
681
0
有效选择七个关于 Java 的 JSON 开源类库

有效选择七个关于Java的JSON开源类库 April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-......

溪边九节
2014/04/19
12.9K
14
JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载

JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层...

刘邵博
2012/10/29
560
1

没有更多内容

加载失败,请刷新页面

加载更多

idea修改新的git地址

我们在项目变动中通常会遇到更换git地址情况,这里介绍一个在idea项目中简单更换git地址操作: 1、点击VCS; 2、点击Git; 3、点击Remotes; 具体步骤如图 4、点击框中链接即可在右边看到一个...

west_coast
21分钟前
6
0
将规则集传递给mixin

允许包装在mixin中定义的css块。 分离的规则集是一组CSS属性、嵌套规则集、媒体声明或者是存储在变量中的任何其他内容,我们可以将它包含在规则集中或其他结构中,并且所有属性都将复制到那里...

凌兮洛
23分钟前
4
0
玩转阿里云 Terraform(一):Terraform 是什么

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴...

阿里云官方博客
23分钟前
4
0
科研大数据面临的挑战

近几十年硬件的发展非常迅猛,第一台Macintosh苹果电脑的内存是128KB(0.13MB),现在很多笔记本配的是8GB的内存,硬盘1TB(1024GB),2TB的很常见。大型的数据服务器上还会有更大的储容量,...

英论阁学术院
23分钟前
5
0
python学习10.09:Python列表和元组的底层实现

有关列表(list)和元组(tuple)的底层实现,本节分别从它们的源码来进行分析。 首先来分析 list 列表,它的具体结构如下所示: typedef struct { PyObject_VAR_HEAD /* Vector o...

太空堡垒185
24分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部