Android/Java多线程下载
来源:互联网 发布:淘宝上我的店铺去哪找 编辑:程序博客网 时间:2024/05/19 12:39
package com.lipeng.download;import java.io.File;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;/** * 多线程下载 * @author Dell */public class MulThreadDownload {public static void main(String[] args) {String path = "http://192.168.188.1:8080/test/FeiQ.exe"; int threadSize = 3;try {new MulThreadDownload().download(path, threadSize);} catch (Exception e) {e.printStackTrace();}}/** * 下载文件 * @param path 下载路径 * @param threadSize 线程个数 * @throws Exception */private void download(String path, int threadSize) throws Exception {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if(conn.getResponseCode() == 200){int contentLength = conn.getContentLength();// 获取下载文件的内容长度File file = new File(getFileName(path));// rwd方式:打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。 // Android 程序要使用rwd方式,防止文件丢失RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");randomAccessFile.setLength(contentLength);// 设置该文件的长度等于下载文件的长度randomAccessFile.close();int block = contentLength%threadSize==0 ? contentLength/threadSize : contentLength/threadSize + 1;// 设置每个县城下载的数量for(int threadId=0; threadId<threadSize; threadId++){DownloadThread thread = new DownloadThread(threadId, block, url, file);thread.start();}} else {System.out.println("下载失败");}}private class DownloadThread extends Thread{private int threadId;private int block; private URL url;private File file;/** * @param threadId 线程ID * @param block 每个线程下载数据量 * @param url 下载路径 * @param file 下载存放文件 */public DownloadThread(int threadId, int block, URL url, File file){this.threadId = threadId;this.block = block;this.url = url;this.file = file;}@Overridepublic void run() {int startLocation = threadId * block;// 从网络文件的开始下载位置int endLocation = (threadId + 1) * block - 1;// 到网络文件下载的结束位置try {RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");randomAccessFile.seek(startLocation);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");conn.setRequestProperty("Range", "bytes=" + startLocation + "-" + endLocation);// 写入文件InputStream in = conn.getInputStream();int len;byte[] buffer = new byte[1024];while((len=in.read(buffer)) != -1){randomAccessFile.write(buffer, 0, len);}randomAccessFile.close();in.close();System.out.println("第" + (threadId + 1) + "线程下载完成");} catch (Exception e) {e.printStackTrace();}}}/** * 获取文件名称 * @param path * @return */private String getFileName(String path) {if(path != null && !"".equals(path)){return path.substring((path.lastIndexOf("/") + 1));}return null;}}
0 0
- Android/Java多线程下载
- Android(Java):多线程断点续传下载
- java(android)多线程下载,和多线程断点下载
- java或android多线程断点下载
- Java、Android中的多线程异步下载
- 浅谈Android和java中的多线程下载
- Android多线程下载(java项目中)
- 浅谈Android和java中的多线程下载
- Java多线程,断点续传下载(Android通用)
- Android Java 多线程下载文件 demo
- Android -- 多线程下载, 断点下载
- Android断点下载,多线程下载
- Android学习笔记---java实现多线程下载器,30_多线程下载原理介绍和使用
- android 多线程下载
- Android 多线程文件下载
- android多线程断点下载
- Android 多线程下载
- Android 多线程下载
- 3.1.4 仿射变换
- 第十七周项目二 指针玩字符串 3-2 指针做形参求字符串长度
- 第16周项目2-比较字符串
- android 自定义xy轴 折现效果
- XML基础(二)
- Android/Java多线程下载
- 第十六周 OJ:找出N之内的所有完数
- CSS3简明教程-2.1.CSS3边框之border-image
- 第16周项目2-去除句子中所有的空格(指针作形参)
- 第十七周项目二 指针玩字符串 3-1 数组做形参求字符串长度
- ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境
- 支付宝收费惊呆小伙伴:都是微信给逼的
- STL map与Boost unordered_map
- python2和3的区别