複製程式碼如下:
包org.load.download;
導入java.io.File;
導入java.io.IOException;
導入 java.io.InputStream;
導入 java.io.RandomAccessFile;
導入 java.text.DecimalFormat;
導入 org.apache.http.HttpEntity;
導入 org.apache.http.HttpResponse;
導入 org.apache.http.client.ClientProtocolException;
導入 org.apache.http.client.HttpClient;
導入 org.apache.http.client.methods.HttpGet;
導入 org.apache.http.impl.client.DefaultHttpClient;
公開課下載{
公共靜態無效主(字串[] args){
新線程(新D(“http://al.VeVB.COm:81/200812/tools/HA_LeapFTP.rar”))
。
新線程(
新D(
“http://al.VeVB.COm:81/200812/tools/HA_LeapFTP.rar”))
。
}
}
D 類別實作 Runnable {
私人靜態最終字符串路徑=“E://下載”;
私有字串 url;
私有字串檔名 = null;
靜止的 {
if (!new File(PATH).exists()) {
新文件(路徑).mkdirs();
}
}
公共D(字串網址){
這個.url = url;
this.fileName = this.url.substring(this.url.lastIndexOf('/') + 1,
this.url.length()); // 取得檔案名稱
}
公用無效下載()拋出ClientProtocolException,IOException {
最終 RandomAccessFile 檔案 = new RandomAccessFile(this.PATH + File.separator
+ this.fileName, "rw");
HttpClient 客戶端 = new DefaultHttpClient();
HttpGet get = new HttpGet(this.url);
//client.getParams().setParameter("http.socket.timeout", 5000); // 設定連線逾時
長 localFileSize = this.getLocalFileSize();
最終長remoteFileSize = this.getRemoteFileSize();
// 如果本機檔案未下載完成,則斷點下載
if (-1 != 本機檔案大小 && -1 != 遠端檔案大小
&& 本地檔案大小 < 遠端檔案大小) {
file.seek(localFileSize); // 本地標記
get.addHeader("範圍", "bytes=" + localFileSize + "-"
+ 遠端檔案大小); // 遠端標記
}
// 如果本機檔案大小大於等於遠端文件,則已下載完成
if (-1 != localFileSize && localFileSize >= remoteFileSize) {
返回;
}
// 開始下載
HttpResponse 回應 = client.execute(get);
if (300 >= response.getStatusLine().getStatusCode()) {
HttpEntity en = response.getEntity();
輸入流= en.getContent();
字節[] by =新字節[512];
int 長度 = -1;
// 顯示資料
新線程(新可運行(){
@覆蓋
公共無效運行(){
嘗試 {
while (file.length() < RemoteFileSize) {
//Runtime.getRuntime().exec("cmd cls"); // 聽說會另外一個行程
System.out.println(檔名
+ "已下載:/t"
+ new DecimalFormat("0.00%").format(文件
.length() / (double)remoteFileSize));
線程.sleep(5000);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
})。
// 開始下載
while (-1 != (len = in.read(by))) {
文件.write(by, 0, len);
}
附寄();
client.getConnectionManager().shutdown();
}
}
// 取得本機檔案大小
私有長 getLocalFileSize() {
檔案 file = new File(PATH + File.separator + this.fileName);
if (!file.exists()) {
返回-1l;
}
返回檔案.length();
}
// 取得遠端檔案大小
private long getRemoteFileSize() 拋出 ClientProtocolException,
IOException {
HttpClient 客戶端 = new DefaultHttpClient();
HttpGet get = new HttpGet(this.url);
client.getParams().setParameter("http.socket.timeout", 5000);
HttpResponse 回應 = client.execute(get);
if (200 == response.getStatusLine().getStatusCode()
|| 300 >= 回應.getStatusLine().getStatusCode()) {
HttpEntity en = response.getEntity();
return en.getContentLength();
}
返回-1l;
}
@覆蓋
公共無效運行(){
嘗試 {
下載();
System.out.println(this.fileName + "/t下載完成");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}