java多线程下载web上的资源数据

来源:互联网 发布:手机清除数据后果严重 编辑:程序博客网 时间:2024/05/06 13:24

    java多线程下载资源:


package com.example.net;import java.io.File;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;public class MulThreadDownload {public static void main(String[] args) throws Exception{String path = "http://192.168.1.105:8080/Web/downloadsetup.exe";URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if(conn.getResponseCode() == 200){int length = conn.getContentLength();File file = new File(path.substring(path.lastIndexOf("/")+1));//RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");accessFile.setLength(length);accessFile.close();//block为每个线程需要下载的数据量int block = length % 3 ==0 ? length/3:length/3 + 1;//假设开三个线程for(int threadid=0;threadid<3;threadid++){new DownloadThread(threadid,url,block,file).start();}}}/** * 线程分段下载 * @author tdw * */private static class DownloadThread extends Thread{private int threadid;private URL url;private int block;private File file;public DownloadThread(int threadid, URL url, int block, File file) {this.threadid = threadid;this.url = url;this.block = block;this.file = file;}@Overridepublic void run() {int start = threadid*block;int end = (threadid+1)*block-1;try {HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");accessFile.seek(start);conn.setRequestProperty("Range", "bytes="+start+"-"+end);//采用分段下载时,其返回码为206if(conn.getResponseCode() == 206){byte[] buffer = new byte[1024];InputStream inStream = conn.getInputStream();int len = 0;while((len = inStream.read(buffer)) != -1){accessFile.write(buffer, 0, len);}accessFile.close();inStream.close();}System.out.println("第"+threadid+"条线程下载完成.");} catch (Exception e) {e.printStackTrace();}}}}

注:path为待下载资源路径。

0 0
原创粉丝点击