- 浏览: 148458 次
- 性别:
- 来自: 深圳
文章分类
最新评论
/** * */ package org.crazyit.net; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class DownUtil { // 定义下载资源的路径 private String path; // 指定所下载的文件的保存位置 private String targetFile; // 定义需要使用多少线程下载资源 private int threadNum; // 定义下载的线程对象 private DownloadThread[] threads; // 定义下载的文件的总大小 private int fileSize; public DownUtil(String path, String targetFile, int threadNum) { this.path = path; this.threadNum = threadNum; // 初始化threads数组 threads = new DownloadThread[threadNum]; this.targetFile = targetFile; } public void download() throws Exception { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); conn.setRequestProperty( "Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"); conn.setRequestProperty("Connection", "Keep-Alive"); // 得到文件大小 fileSize = conn.getContentLength(); conn.disconnect(); int currentPartSize = fileSize / threadNum + 1; RandomAccessFile file = new RandomAccessFile(targetFile, "rw"); // 设置本地文件的大小 file.setLength(fileSize); file.close(); for (int i = 0; i < threadNum; i++) { // 计算每条线程的下载的开始位置 int startPos = i * currentPartSize; // 每个线程使用一个RandomAccessFile进行下载 RandomAccessFile currentPart = new RandomAccessFile(targetFile, "rw"); // 定位该线程的下载位置 currentPart.seek(startPos); // 创建下载线程 threads[i] = new DownloadThread(startPos, currentPartSize, currentPart); // 启动下载线程 threads[i].start(); } } // 获取下载的完成百分比 public double getCompleteRate() { // 统计多条线程已经下载的总大小 int sumSize = 0; for (int i = 0; i < threadNum; i++) { sumSize += threads[i].length; } // 返回已经完成的百分比 return sumSize * 1.0 / fileSize; } private class DownloadThread extends Thread { // 当前线程的下载位置 private int startPos; // 定义当前线程负责下载的文件大小 private int currentPartSize; // 当前线程需要下载的文件块 private RandomAccessFile currentPart; // 定义已经该线程已下载的字节数 public int length; public DownloadThread(int startPos, int currentPartSize, RandomAccessFile currentPart) { this.startPos = startPos; this.currentPartSize = currentPartSize; this.currentPart = currentPart; } @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); conn.setRequestProperty( "Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Charset", "UTF-8"); InputStream inStream = conn.getInputStream(); // 跳过startPos个字节,表明该线程只下载自己负责哪部分文件。 inStream.skip(this.startPos); byte[] buffer = new byte[1024]; int hasRead = 0; // 读取网络数据,并写入本地文件 while (length < currentPartSize && (hasRead = inStream.read(buffer)) != -1) { currentPart.write(buffer, 0, hasRead); // 累计该线程下载的总大小 length += hasRead; } currentPart.close(); inStream.close(); } catch (Exception e) { e.printStackTrace(); } } } }
发表评论
-
使用SlidingMenu开发demo
2013-05-06 16:29 1859源码: http://download.csdn.net ... -
Fragment学习笔记(待更新)
2013-05-06 11:30 1024简介: http://www.360doc.com/co ... -
下拉显示全部图片
2013-05-06 11:20 1281android:layout_height=" ... -
高仿微信学习
2013-05-03 16:28 19171、登录界面 button中设置该属性,点击的时 ... -
简单从网络上获取JSON数据解析
2013-05-03 12:05 10790package com.jiangqq.util; i ... -
ExpandableListActivity的使用。
2013-05-02 16:10 993其实也就是自定义了一个Adapter,也可以使用Simple ... -
侧边字母索引栏的使用
2013-04-13 10:42 1475自定义一个view 绘制 package ... -
(转)退出所有activity
2013-04-13 10:09 3195SysApplication这个类复制到工程里面,然后在每个 ... -
(转)在任一View上增加数字文字
2013-04-11 14:28 1269自定义一个TextView package com.jac ... -
(转)onInterceptTouchEvent和onTouchEvent调用时序
2013-04-10 16:03 1433onInterceptTouchEvent和onTouchE ... -
(转)Android中自定义View的MeasureSpec使用
2013-04-06 16:49 11631.如果没有再配置文件中精确指定多大,而是由子VIEW的大 ... -
仿IQIYI界面
2013-04-06 16:33 723底部菜单 采用5个不同的Linerlayout,每 ... -
PerferenceActivity学习
2013-03-30 15:05 1031SharedPreferences 能存储一下类型数据 ... -
手机QQ UI界面分析
2013-03-30 14:41 1680一、设置界面。 采用PerferenceActivity ... -
(转)android基本控件使用大汇集
2013-03-29 17:12 705原文: http://code.eoe.cn/335 ... -
内存泄露,优化收集
2013-03-29 16:44 763Android杂谈--内存泄露(1)--contentV ... -
手势缩放字体大小
2013-03-29 15:38 1817使用装饰者模式,讲一个普通的TextView 包装成一个可放 ... -
卸载安装应用,在线升级
2013-03-28 15:27 1151安装程序的方法: 1 ... -
Anim的使用与桌面快捷方式的生成
2013-03-28 14:31 800package org.crazyit.desktop; ... -
Android中Activity启动模式详解
2013-03-24 22:58 757参考http://www.cnblogs.com/fanch ...
相关推荐
记得在完成文件下载后关闭连接以释放资源: ```java conn.disconnect(); ``` 6. **处理异常**: 在整个过程中,需要捕获可能出现的异常,例如网络连接问题、证书问题等,确保程序的健壮性。 以上就是使用...
总之,这个项目展示了如何使用C++和WinHTTP库实现HTTPS协议下的文件下载功能,涉及到了网络安全、面向对象编程和Windows API等多个IT领域的核心技术。开发者可以通过学习和理解这个项目,提升自己的网络编程和C++...
调用`connect()`方法建立实际的网络连接,然后通过`getInputStream()`获取服务器的响应流,准备下载文件。同时,创建一个本地文件的`FileOutputStream`用于写入接收到的数据。 5. **下载文件**: 使用`...
假设你遇到的问题是,当访问`http://example.com/images/logo.png`时,浏览器开始下载文件而不是显示图片。首先,确保`location`块中有正确的配置,例如: ``` location /images/ { root /var/www/html; try_...
标题中的“pb实现http文件下载功能--源代码 可以直接使用”指的是使用PowerBuilder(简称PB)编程语言实现HTTP协议进行文件下载的功能,并且提供了可以直接使用的源代码。这个功能在软件开发中常用于实现自动更新...
在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...
在易语言中,开发网络应用程序是常见的应用场景之一,其中HTTP文件下载模块是实现网络数据传输的重要组成部分。 本主题涉及的是两个不同类型的易语言Http文件下载模块,它们提供了对HTTP协议的支持,允许程序通过...
在IT领域,进行网络应用开发和测试时,模拟HTTP文件下载服务器是一种常见的需求。这样的工具能够帮助开发者在本地环境中模拟实际的文件下载过程,以便进行功能验证、性能测试或者问题排查。本文将详细探讨“HTTP文件...
使用WinINet进行文件下载,可以避免开发者直接处理底层网络细节,使得代码更加简洁和易于维护。 1. **初始化WinINet库**:在使用WinINet API之前,需要先调用`InternetOpen()`函数来初始化一个会话。这个函数通常...
在TCP协议基础上模拟HTTP文件下载是一项技术挑战,它要求我们理解TCP/IP协议栈的基本工作原理以及HTTP协议的请求和响应机制。在这个过程中,我们将主要关注以下几个核心知识点: 1. **TCP/IP协议**:TCP(传输控制...
总的来说,HTTP从文件服务器下载文件涉及到网络通信的基本原理、HTTP协议的工作方式以及实际应用中的各种技术细节,包括请求响应机制、URL定位、附件下载等。理解这些概念对于进行Web开发、网络管理和日常的文件共享...
以上就是Android开发中关于访问网络、保存文件以及HTTP访问的基本知识点。理解并掌握这些技能,将有助于开发出功能完善的Android应用。在实际项目中,还需要注意网络连接的错误处理、异步操作、缓存策略等细节。
当用户访问PHP页面时,服务器需要通过HTTP响应头来指示浏览器进行文件下载而非直接渲染内容。在PHP中,可以通过`header()`函数设置`Content-Type`和`Content-Disposition`等头信息来实现这一目标。例如: ```php ...
对于"qt实现https协议文件下载"这一主题,我们将深入探讨如何利用Qt库来实现安全的HTTPS协议文件下载。 首先,我们需要理解HTTPS协议。HTTPS(HyperText Transfer Protocol Secure)是一种通过SSL或TLS加密的HTTP...
- **日志记录**:记录文件上传和下载的事件,以便于监控和排查问题。 8. **单元测试**: 对文件上传和访问功能进行单元测试,确保代码的正确性。可以使用MockMultipartFile来模拟文件上传请求,然后验证文件是否...
标题中的“即时访问网络图片文件展示---HttpURLConnection”是指通过Java的HttpURLConnection类来实现从网络上获取并显示图片的功能。HttpURLConnection是Java标准库提供的一种HTTP协议的网络连接工具,它允许应用...
总的来说,这个C#多线程文件下载工具是一个综合性的解决方案,它涵盖了网络通信(通过HTTPClient访问REST API)、多线程下载以提高效率、本地数据存储(使用SQLite)以及文件压缩(使用ZipFile)。这样的工具对于...
本项目"qt多线程高效下载文件"是基于Qt实现的一个实用工具,它利用多线程技术来提高文件下载的效率,特别是对于大文件或者需要同时下载多个文件的场景,这种多线程策略显得尤为重要。 在HTTP协议方面,它是互联网上...
在Java编程环境中,HttpClient库是Apache HTTP Components项目的一部分,它为开发者提供了强大的HTTP客户端功能,可以...通过理解HttpClient的工作原理和提供的API,开发者可以构建出稳定、高效的文件下载解决方案。
通过分析这个项目,你可以看到如何在`Controllers`目录下的某个控制器类中实现文件下载的方法,以及如何配置路由来确保客户端可以通过正确的URL访问这个服务。你还可以学习到如何在`Global.asax.cs`或`Startup.cs`中...