当前位置:首页 > 开发 > 移动开发 > 正文

java android 多线程下载

发表于: 2011-10-22   作者:夏文权   来源:转载   浏览:
摘要: package xiawenquan.com; import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * 多线程下载 * @author xiaw
package xiawenquan.com;

import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * 多线程下载
 * @author xiawenquan
 *
 */
public class MyDownLoad {
	
	public static void main(String[] args) {
		
		String path = "http://gb.cri.cn/mmsource/images/2011/10/22/a817ae91a2bb48e59c40673a9694b5fb.jpg";
		new MyDownLoad().download(path,3);

	}

	/**
	 * 根据路径和线程数下载文件
	 * @param path
	 * @param threadSize
	 */
	private void download(String path, int threadSize) {
		try {
			URL url = new URL(path);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setReadTimeout(60*1000);
			connection.setRequestMethod("GET");
			if(connection.getResponseCode() == 200){
				int fileLength = connection.getContentLength();
				File file = new File(getFileNameByPath(path));
				RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");
				accessFile.setLength(fileLength);
				accessFile.close();
				// 计算每条线程下载的数据量,如果不整除则加上1
				int block = fileLength / threadSize == 0 ? fileLength / threadSize : fileLength / threadSize + 1;
				for(int threadid = 0; threadid < threadSize; threadid ++){
					new DownLoad(threadid,block,url,file).start();
				}
				
			}else{
				System.out.println("下载失败!");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据路径获取文件名称
	 * @param path
	 * @return
	 */
	private String getFileNameByPath(String path) {
		String fileName = path.substring(path.lastIndexOf("/" ) + 1);
		return fileName;
	}

	// 负责下载的线程类
	private class DownLoad extends Thread{
		private int threadid;
		private int block;
		private URL url;
		private File file;
		
		public DownLoad(int threadid, int block, URL url, File file) {
			this.threadid = threadid;
			this.block = block;
			this.url = url;
			this.file = file;
		}
		
		@Override
		public void run() { // TODO 这个run()是每个线程下载的代码
			try {
				int start = threadid * block ; // 计算线程下载的开始位置
				int end = (threadid + 1) * block - 1;// 计算线程下载的结束位置
				RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");
				accessFile.seek(start); // seek()是使每一条线程在本地文件file中的什么位置开始写入数据
				// 然后每条线程去连网
				HttpURLConnection connection = (HttpURLConnection) url.openConnection();
				connection.setReadTimeout(60*1000);
				connection.setRequestMethod("GET");
				connection.setRequestProperty("Range", "bytes=" + start + "-" + end );
				if(connection.getResponseCode() == 206){ // 分段下载的返回码不是200,而是206
					InputStream inputStream = connection.getInputStream(); // 获取网络返回来的数据,返回来的数据是每一条线程的下载的数据
					byte buffer[] = new byte[1024];
					int len = 0;
					while ((len = inputStream.read(buffer)) != -1) {
						accessFile.write(buffer, 0, len);
					}
					accessFile.close();
					inputStream.close();
					System.out.println("第" + (threadid + 1) + "条线程下载完成");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}
 

java android 多线程下载

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线
关注微信号:javalearns 随时随地学Java 或扫一扫 随时随地学Java 打算实现一个下载功能,当然理想
<strong>使用场景</strong> apk应用内更新,其他中小文件的下载,断点续传下载等,先来
这个月接到一个项目。要写一个像360助手一样的对于软件管理的APP;当中。遇到了一个问题:多线程断
首先网络连接设置权限: <!-- 在SD卡中创建与删除文件权限 --> <uses-permission android:
package my.Thread; import java.io.BufferedInputStream; import java.io.RandomAccessFile; impor
import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnectio
先看下项目结构: http多线程断点下载涉及到 数据库,多线程和http请求等几个模块,东西不是很多,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号