一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 命令行使用支持斷點續傳的java多線程下載器

命令行使用支持斷點續傳的java多線程下載器

2019-11-07 14:37java教程網 JAVA教程

java命令行下載器,支持斷點續傳下載,多線程下載,需要的朋友可以參考下

代碼如下:

package org.load.download;

 

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.text.DecimalFormat;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class Download {
 public static void main(String[] args) {
  new Thread(new D("http://m.ythuaji.com.cn/200812/tools/HA_LeapFTP.rar"))
    .start();

  new Thread(
    new D(
      "http://m.ythuaji.com.cn/200812/tools/HA_LeapFTP.rar"))
    .start();
 }
}

class D implements Runnable {
 private static final String PATH = "E:\\download";
 private String url;
 private String fileName = null;

 static {
  if (!new File(PATH).exists()) {
   new File(PATH).mkdirs();
  }
 }

 public D(String url) {
  this.url = url;
  this.fileName = this.url.substring(this.url.lastIndexOf('/') + 1,
    this.url.length()); // 得到文件名
 }

 public void download() throws ClientProtocolException, IOException {
  final RandomAccessFile file = new RandomAccessFile(this.PATH + File.separator
    + this.fileName, "rw");

  HttpClient client = new DefaultHttpClient();
  HttpGet get = new HttpGet(this.url);

//  client.getParams().setParameter("http.socket.timeout", 5000); // 設置連接超時

  long localFileSize = this.getLocalFileSize();
  final long remoteFileSize = this.getRemoteFileSize();

  // 如果本地文件未下載完成,則斷點下載
  if (-1 != localFileSize && -1 != remoteFileSize
    && localFileSize < remoteFileSize) {
   file.seek(localFileSize); // 本地標記
   get.addHeader("Range", "bytes=" + localFileSize + "-"
     + remoteFileSize); // 遠程標記
  }

  // 如果本地文件大小大于等于遠程文件,則已經下載完成
  if (-1 != localFileSize && localFileSize >= remoteFileSize) {
   return;
  }

  // 開始下載
  HttpResponse response = client.execute(get);
  if (300 >= response.getStatusLine().getStatusCode()) {
   HttpEntity en = response.getEntity();
   InputStream in = en.getContent();
   byte[] by = new byte[512];
   int len = -1;

   // 顯示進度
   new Thread(new Runnable(){
    @Override
    public void run() {
     try {
      while (file.length() < remoteFileSize) {
//       Runtime.getRuntime().exec("cmd cls");  // 聽說會另起個進程
       System.out.println(fileName
         + "已下載:\t"
         + new DecimalFormat("0.00%").format(file
           .length() / (double) remoteFileSize));
       Thread.sleep(5000);
      }
     } catch (IOException e) {
      e.printStackTrace();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }).start();

   // 開始下載
   while (-1 != (len = in.read(by))) {
    file.write(by, 0, len);
   }

   in.close();
   client.getConnectionManager().shutdown();
  }
 }

 // 得到本地文件大小
 private long getLocalFileSize() {
  File file = new File(PATH + File.separator + this.fileName);
  if (!file.exists()) {
   return -1l;
  }

  return file.length();
 }

 // 得到遠程文件大小
 private long getRemoteFileSize() throws ClientProtocolException,
   IOException {
  HttpClient client = new DefaultHttpClient();
  HttpGet get = new HttpGet(this.url);
  client.getParams().setParameter("http.socket.timeout", 5000);
  HttpResponse response = client.execute(get);
  if (200 == response.getStatusLine().getStatusCode()
    || 300 >= response.getStatusLine().getStatusCode()) {
   HttpEntity en = response.getEntity();
   return en.getContentLength();
  }
  return -1l;
 }

 @Override
 public void run() {
  try {
   download();
   System.out.println(this.fileName + "\t下載完成");
  } catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色噜噜狠狠狠综合曰曰曰88av | 手机在线观看精品国产片 | 国产第一综合另类色区奇米 | 亚洲精品第五页中文字幕 | 欧美精品久久久久久久影视 | 午夜福利电影网站鲁片大全 | 91免费视频国产 | 日韩毛片基地一区二区三区 | 99精品久久精品一区二区小说 | 色哟哟在线资源 | 国产精品全国探花在线观看 | 欧美一级片在线看 | 色综合久久中文字幕 | 日本ww视频| 国产3344视频在线观看免费 | 天天爽天天操 | 91麻豆精品 | 69福利区| 三级黄色片在线观看 | 四虎免费影院在线播放 | 小浪妇奶真大水多 | 男男按摩1069gⅴ | 京东热dj6666| 日本高清视频在线观看 | 欧美精品日韩 | 青草影院在线观看 | 91影视永久福利免费观看 | 五月婷婷丁香色 | 国产亚洲高清国产拍精品 | 91精品啪在线观看国产91九色 | 精品美女国产互换人妻 | 国模李丽莎大尺度啪啪 | 久久91精品国产91久久户 | 日本孕妇与黑人xxxxxx | 女人麻豆国产香蕉久久精品 | 国产高清在线精品一区二区三区 | 耽美肉文高h | 免费欧美日韩 | 国产微拍精品一区 | 特级淫片欧美高清视频蜜桃 | 亚洲精品视 |