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 }

你可能感兴趣的:(java)