资源简介
java实现支持Http断点续传,下载过程可暂停,同时支持Ftp下载。
代码片段和文件信息
/**
* 文件名:ControlFileFetch.java
* 创建人:张文娅
* 日期:2010年7月18日
* 描述:主线程,用于控制流程以及子线程
* 参考资料:《JAVA编程思想》
* 《JAVA范例大全》
* 参考链接:http://202.194.127.1/dxjc/wlcxsj/JDK_API_1_6/overview-summary.html
*
*/
package com;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
public class ControlFileFetch extends Thread{ //控制主线程
private TranBean tranBean = null; //保存传输文件信息
private long[] startPosition;
private long[] endPosition;
private FileFetch[] childThread; //子线程
private long fileLength;
private boolean isFirstGet = true;
private boolean isStopGet = false;
public boolean downloadOver = false;
private File fileTemp; //下载临时信息文件
private File file; //本地文件
protected boolean fileExist = false;
private DataOutputStream output;
public ControlFileFetch (TranBean tranBean) throws IOException {
this.tranBean = tranBean;
fileTemp = new File(tranBean.getFileDir() + tranBean.getFileName() +“.tmp“);
file = new File(tranBean.getFileDir() + tranBean.getFileName());
if(file.exists()&&!fileTemp.exists()){ //由于每次下载全部结束会删掉临时文件
isStopGet = true; //如果本地文件存在,而临时文件不存在,则直接return
fileExist = true;
DownLoader.display(“文件“+tranBean.getFileName()+“已存在“);
return;
}
if(fileTemp.exists()){ //临时文件存在,则曾经下载过,但下载没有完成
isFirstGet = false;
readInfo(); //读取临时文件信息,获得各子线程开始结束位置
}else {
startPosition = new long[tranBean.getCount()];
endPosition = new long[tranBean.getCount()];
}
}
public void run(){
try{
if(isFirstGet){ //第一次下载,分配各子线程开始结束位置
fileLength = getFileSize();
DownLoader.display(“文件总长度为“ + fileLength);
if(fileLength == -1){
DownLoader.display(“文件长度未知“);
}
else if(fileLength == -2){
DownLoader.display(“文件不可访问“);
}
else{
for(int i=0 ;i startPosition[i] = (long)(i*(fileLength/startPosition.length));
}
for(int i=0 ;i endPosition[i] = (long)(startPosition[i]+fileLength/endPosition.length);
}
}
}
childThread = new FileFetch[startPosition.length]; //创建子线程
for(int i = 0;i childThread[i] = new FileFetch(tranBean.getWebAddr()tranBean.getFileDir() + tranBean.getFileName()startPosition[i]endPosition[i]i);
DownLoader.display(“线程“+(i+1)+“:开始位置=“+startPosition[i]+“结束位置=“+endPosition[i]);
childThread[i].start(); //启动子线程
}
boolean breakWhile = false;
while (!isStopGet){
savePosition(); //每隔0.5秒,保存下载位置
try{
Thread.sleep(500);
}catch(Exception e){
DownLoader.display(“线程在睡觉啦“);
}
breakWhile = true;
for(int i = 0;i if(!childThread[i].downLoadO
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 232 2010-07-14 19:02 DownLoader\.classpath
文件 387 2010-07-14 19:02 DownLoader\.project
文件 4709 2010-07-19 10:30 DownLoader\bin\com\ControlFileFetch.class
文件 6197 2010-07-19 10:29 DownLoader\bin\com\DownLoader.class
文件 964 2010-07-19 10:31 DownLoader\bin\com\FileAccess.class
文件 2369 2010-07-19 10:30 DownLoader\bin\com\FileFetch.class
文件 5427 2010-07-19 10:30 DownLoader\bin\com\FtpDialog.class
文件 2932 2010-07-19 10:25 DownLoader\bin\com\FtpMethod.class
文件 989 2010-07-19 10:21 DownLoader\bin\com\HttpMethod.class
文件 1333 2010-07-19 10:27 DownLoader\bin\com\TranBean.class
文件 490 2010-07-19 08:39 DownLoader\readme.txt
文件 5384 2010-07-19 10:30 DownLoader\src\com\ControlFileFetch.java
文件 7188 2010-07-19 10:29 DownLoader\src\com\DownLoader.java
文件 1042 2010-07-19 10:31 DownLoader\src\com\FileAccess.java
文件 2227 2010-07-19 10:30 DownLoader\src\com\FileFetch.java
文件 5884 2010-07-19 10:30 DownLoader\src\com\FtpDialog.java
文件 2617 2010-07-19 10:25 DownLoader\src\com\FtpMethod.java
文件 849 2010-07-19 10:21 DownLoader\src\com\HttpMethod.java
文件 1299 2010-07-19 10:27 DownLoader\src\com\TranBean.java
目录 0 2010-07-19 09:40 DownLoader\bin\com
目录 0 2010-07-19 09:38 DownLoader\src\com
目录 0 2010-07-18 16:39 DownLoader\bin
目录 0 2010-07-14 19:05 DownLoader\src
目录 0 2010-07-16 09:46 DownLoader
----------- --------- ---------- ----- ----
52519 24
评论
共有 条评论