public void DownLoad(String urlString,int threadSize) throws UnknownHostException, IOException
{
URL url=new URL(urlString);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
int filelength=con.getContentLength();//获得文件大小
pb.setMax(filelength);//设置进度条最大值
String fileName=urlString.substring(urlString.lastIndexOf('/')+1);//获得文件名
File saveFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath(),fileName);
RandomAccessFile accessFile=new RandomAccessFile(saveFile, "rwd");
accessFile.setLength(filelength);//设置跟下载文件一样大小
accessFile.close();
//计算每个线程下载数
int block=filelength%threadSize==0? filelength/threadSize : filelength/threadSize+1;
for(int threadid=0;threadid<threadSize;threadid++)
{
new DownloadThread(url, saveFile, block, threadid).start();
}
}
private class DownloadThread extends Thread{
private URL url;
private File saveFile;
private int block;
private int threadid;
public DownloadThread(URL url, File saveFile, int block, int threadid) {
this.url = url;
this.saveFile = saveFile;
this.block = block;
this.threadid = threadid;
}
public void run() {
int startposition = threadid * block;//每个线程开始位置
int endposition = (threadid + 1 ) * block - 1;//每个线程结束位置
try {
RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");
accessFile.seek(startposition);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
conn.setRequestProperty("Range", "bytes="+ startposition+ "-"+ endposition);//从文件什么位置写入
InputStream inStream = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
accessFile.write(buffer, 0, len);//写入数据
Message message=Message.obtain();
message.arg1=len;
handler.sendMessage(message);//通知Handler更新进度条
}
inStream.close();
accessFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
{
URL url=new URL(urlString);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
int filelength=con.getContentLength();//获得文件大小
pb.setMax(filelength);//设置进度条最大值
String fileName=urlString.substring(urlString.lastIndexOf('/')+1);//获得文件名
File saveFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath(),fileName);
RandomAccessFile accessFile=new RandomAccessFile(saveFile, "rwd");
accessFile.setLength(filelength);//设置跟下载文件一样大小
accessFile.close();
//计算每个线程下载数
int block=filelength%threadSize==0? filelength/threadSize : filelength/threadSize+1;
for(int threadid=0;threadid<threadSize;threadid++)
{
new DownloadThread(url, saveFile, block, threadid).start();
}
}
private class DownloadThread extends Thread{
private URL url;
private File saveFile;
private int block;
private int threadid;
public DownloadThread(URL url, File saveFile, int block, int threadid) {
this.url = url;
this.saveFile = saveFile;
this.block = block;
this.threadid = threadid;
}
public void run() {
int startposition = threadid * block;//每个线程开始位置
int endposition = (threadid + 1 ) * block - 1;//每个线程结束位置
try {
RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");
accessFile.seek(startposition);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
conn.setRequestProperty("Range", "bytes="+ startposition+ "-"+ endposition);//从文件什么位置写入
InputStream inStream = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
accessFile.write(buffer, 0, len);//写入数据
Message message=Message.obtain();
message.arg1=len;
handler.sendMessage(message);//通知Handler更新进度条
}
inStream.close();
accessFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}