import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
private static Messages messages = new Messages();
private static CallBack callback = new CallBack() {
@Override
public void schedule(Messages messages) {
long totalDownloadSize = messages.getTotalDownloadSize();
int currentDownloadSize = messages.getCurrentDownloadSize();
System.out.println((float)currentDownloadSize * 100.0f / (float)totalDownloadSize + "%");
}
@Override
public void handlerMessages(Messages messages) {
}
@Override
public void fail(Messages messages) {
System.out.println(messages.getMsg());
}
};
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
String downloadUrl = "http://www.xiazaiba.com/route.php ct=stat&ac=stat_ads&id=CG8BOVNg&g=aHR0cDovL3d3dy51aWJpYS5jb20vamttc2V0dXAuZXhl";
URL url = new URL(downloadUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(1000 * 5);
conn.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Referer", downloadUrl);
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.connect();
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
FileDownloader loader = new FileDownloader(callback, 4, messages);
int size = conn.getContentLength();//根据响应获取文件大小
loader.setSavePath("E:\\haoya.exe");
loader.setConfigPath("E:\\haoya.properties");
loader.download(downloadUrl, size);
}else{
System.out.println(conn.getResponseCode());
}
conn.disconnect();
long endTime = System.currentTimeMillis();
System.out.println("Time" + (endTime - startTime));
}
}
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URL;
import java.util.Map;
public class FileDownloader implements DownLoadCallBack {
//单个线程已经下载的长度
private int downloadSize;
//线程数
private DownloadThread[] threads;
// 每条线程下载的长度
private int block;
//文件保存路径
private String savePath;
//配置文件路径
private String configPath;
private File saveFile;
private boolean isNext;
private int call_curr;
private int call_total;
private PropertiesHelper propertiesHelper;
private Map datas;
private Messages messages;
private CallBack callback;
//总的下载长度
private int downloadLength;
//是否退出下载
private boolean exit;
public FileDownloader(CallBack callback, int threadNum, Messages messages) {
this.callback = callback;