• java 断点下载


     1 package com.my9yu.manager.module.test;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.RandomAccessFile;
     7 
     8 import org.apache.http.HttpEntity;
     9 import org.apache.http.HttpResponse;
    10 import org.apache.http.client.ClientProtocolException;
    11 import org.apache.http.client.HttpClient;
    12 import org.apache.http.client.methods.HttpGet;
    13 import org.apache.http.impl.client.DefaultHttpClient;
    14 
    15 public class TestHttp {
    16     public static void main(String[] args) throws ClientProtocolException, IOException {
    17         String url = "http://dl_dir.qq.com/music/clntupate/QQMusic_Setup_85_850.exe";
    18         String downFile = "d:\\QQMusic.exe";
    19         Long netFileLenght = getNetFileSize(url);
    20         Long localFileLenght = getLocalFileSize(downFile);
    21 
    22         if (localFileLenght >= netFileLenght) {
    23             System.out.println("已下载完成");
    24             return;
    25         }
    26 
    27         System.out.println("netFileLenght : " + netFileLenght + " localFileLenght : " + localFileLenght);
    28         final HttpClient httpClient = new DefaultHttpClient();
    29         httpClient.getParams().setIntParameter("http.socket.timeout", 5000);
    30 
    31         final HttpGet httpGet = new HttpGet(url);
    32         httpGet.addHeader("Range", "bytes=" + localFileLenght + "-");
    33 
    34         final HttpResponse response = httpClient.execute(httpGet);
    35         final int code = response.getStatusLine().getStatusCode();
    36         final HttpEntity entity = response.getEntity();
    37         System.out.println(code);
    38 
    39         if (entity != null && code < 400) {
    40 
    41             File file = new File(downFile);
    42             RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
    43             randomAccessFile.seek(localFileLenght);
    44 
    45             InputStream inputStream = entity.getContent();
    46             int b = 0;
    47             final byte buffer[] = new byte[1024];
    48             while ((b = inputStream.read(buffer)) != -1) {
    49                 randomAccessFile.write(buffer, 0, b);
    50             }
    51 
    52             randomAccessFile.close();
    53             inputStream.close();
    54             httpClient.getConnectionManager().shutdown();
    55             System.out.println("下载完成");
    56         }
    57     }
    58 
    59     public static Long getLocalFileSize(String fileName) {
    60         File file = new File(fileName);
    61         return file.length();
    62     }
    63 
    64     public static Long getNetFileSize(String url) {
    65         Long count = -1L;
    66         final HttpClient httpClient = new DefaultHttpClient();
    67         httpClient.getParams().setIntParameter("http.socket.timeout", 5000);
    68 
    69         final HttpGet httpGet = new HttpGet(url);
    70         HttpResponse response = null;
    71         try {
    72             response = httpClient.execute(httpGet);
    73             final int code = response.getStatusLine().getStatusCode();
    74             final HttpEntity entity = response.getEntity();
    75             if (entity != null && code == 200) {
    76                 count = entity.getContentLength();
    77             }
    78         } catch (ClientProtocolException e) {
    79             e.printStackTrace();
    80         } catch (IOException e) {
    81             e.printStackTrace();
    82         } finally {
    83             httpClient.getConnectionManager().shutdown();
    84         }
    85         return count;
    86     }
    87 }
  • 相关阅读:
    售后返修管理软件流程设计图
    Easyui datagrid加载数据时默认全选的问题
    如何做好售后管理之售后返修品管理
    您需要售后返修管理软件的N个理由
    使用软件量化考核售后维修人员业绩?
    如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密!
    VS.Net开发必备,让您的代码自动收缩,如何实现!
    vs生成dll,却没有生成相应的lib
    c++、webServices、gsoap、tinyxml、iconv
    gsoap、c++。webservice的client。
  • 原文地址:https://www.cnblogs.com/solq/p/2774902.html
Copyright © 2020-2023  润新知