多线程下载文件雏形_Android学习笔记
来源:互联网 发布:软件著作权作品说明书 编辑:程序博客网 时间:2024/06/06 19:15
下面的代码是仿照传智播客黎活明老师的Android教程后写的,就用多线程下载了一张图片。虽然有点杀鸡用牛刀的意思,但也能说明一些问题。
import java.io.File;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;public class DownLoadDemo{public static void main(String[] args) throws Exception{String path = "http://www.hongname.com/mxtp/z/good/caiyl2/01-1.jpg";downLoad(4, path);}private static String getFileName(String path){return path.substring(path.lastIndexOf('/') + 1);}/** * 下载 * * @param num * 线程总数 * @param path * 下载文件的路径 * @throws Exception */private static void downLoad(int num, String path) throws Exception{URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(8000);int fileLength = conn.getContentLength();// 文件的长度File file = new File(getFileName(path));RandomAccessFile raf = new RandomAccessFile(file, "rwd");raf.setLength(fileLength);// 设置文件的大小raf.close();// 关闭int oneLen = fileLength % num == 0 ? fileLength / num : fileLength/ num + 1;// 每个线程需要下载的长度for (int i = 0; i < num; i++){new DownLoadThread(oneLen, i, path, file).start();// 启动线程}}private static class DownLoadThread extends Thread{private int id;// 线程IDprivate int length;// 需要下载的长度private String path;// 文件路径private File file;// 把文件下载到file中public DownLoadThread(int length, int id, String path, File file){this.length = length;this.id = id;this.path = path;this.file = file;}@Overridepublic void run(){try{downLoad();}catch (Exception e){e.printStackTrace();}}private void downLoad() throws Exception{URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(8000);conn.setRequestMethod("GET");int start = id * length;int end = length * (id + 1) - 1;conn.setRequestProperty("Range", "bytes=" + start + "-" + end);// HTTP协议中规定好的东西,设置好起始位置和结束位置就OK了InputStream is = conn.getInputStream();RandomAccessFile raf = new RandomAccessFile(file, "rwd");raf.seek(start);// 跳到该线程负责区域的起始位置byte[] b = new byte[1024];int len = -1;while (-1 != (len = is.read(b))){raf.write(b, 0, len);// 往文件里写数据}System.out.println("线程 " + id + " 完毕!");}}}
- 多线程下载文件雏形_Android学习笔记
- 赵雅智_android多线程下载带进度条
- 2.0_Android Training 学习笔记_Android 分享操作
- android学习笔记_android权限大全
- linux学习笔记《一.烧写篇_android》
- 1.5_Android Training 学习笔记_Fragment
- 学习笔记_Android系统自带样式
- 学习笔记_Android减小APK大小
- Android学习笔记-文件下载
- [学习笔记]Struts文件下载
- 网站文件下载学习笔记
- Android 文件下载 学习笔记
- [学习笔记]Java下载文件
- Android学习笔记03_Android 事件监听的使用(Listener)
- 学习笔记_android四种点击事件方法
- 学习笔记_android四种点击事件方法
- 极客学院_android的touch事件学习笔记
- 学习笔记_android之Selector与Shape的基本用法
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- 关于《编程珠玑》中一个找出一个不存在的数的问题的探讨
- 北大ACM poj1426
- sql复习
- STL组件1
- 多线程下载文件雏形_Android学习笔记
- static_cast、dynamic_cast reinterpret_cast和const_
- 计算机视觉学术界大牛
- ORA-00257: archiver error. Connect internal only, until freed 错误 解决办法
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)
- windows平台使用 git 下载android源码
- 给开发人员的时间管理建议
- 17个新手常见Python运行时错误
- POJ 1056 and POJ 3630