标签:
1 package com.ljd.wallpaper.utils; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.InputStreamReader; 10 import java.io.RandomAccessFile; 11 import java.net.HttpURLConnection; 12 import java.net.URL; 13 import java.util.ArrayList; 14 import java.util.List; 15 16 public class Download { 17 18 // 迅雷下载 弱爆了 看看这个 19 public static void main(String[] args) { 20 21 Download download = new Download(); 22 download.run(); 23 24 } 25 26 public void run() { 27 List<String> list = new ArrayList<String>(); 28 try { 29 FileInputStream fis = new FileInputStream(new File("/alidata1/linshi/zfy/picurl.txt")); 30 InputStreamReader isr = new InputStreamReader(fis); 31 BufferedReader br = new BufferedReader(isr); 32 33 String x = ""; 34 while ((x = br.readLine()) != null) { 35 list.add(x); 36 } 37 br.close(); 38 isr.close(); 39 fis.close(); 40 } catch (FileNotFoundException e) { 41 e.printStackTrace(); 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 46 for (int i = 0; i < list.size(); i++) { 47 downloadpic(list.get(i)); 48 } 49 } 50 51 public void downloadpic(String imgurl) { 52 53 // 下载链接 54 // imgurl = 55 // "http://vod81.c20.lixian.vip.xunlei.com/download?fid=Fa6JYKhSktIFAC9CS/" 56 // + 57 // "vSiPqvKcgRZYoBAAAAAE+OzDDQMKcK1JvL8LnS4EJ0IzVi&mid=666&threshold=150&tid=" 58 // + "69F8077525A6DBF6225FDA76633D456C&srcid=6&verno=1&g=" 59 // + 60 // "4F8ECC30D030A70AD49BCBF0B9D2E04274233562&ui=xlkuaichuan&s=25847057&" 61 // + "pk=kuaichuan&ak=8:0:999:0&e=1427397980&ms=1433600&ci=&ck=" 62 // + 63 // "27868D3F2491379692DDBA74FA8A3353&at=3129FA76E995680A00968DB0BD6756D1&" 64 // + "n=03A556D175706A6A678744C13A71617200&k=1&ts=1425521078"; 65 // 开始从哪个下载(默认为0) 66 int nStartPos = 0; 67 // 每次读取下载的字节数目(默认2048) 68 69 int nRead = 2048; 70 71 // 下载成功的文件名称 72 73 // String sName = "tortoisehg-3.2.2-x64.rar"; 74 String sName = imgurl.substring(imgurl.lastIndexOf("/") + 1); 75 76 // 保存的文件目录 77 78 System.out.println(sName); 79 80 String sPath = "/alidata1/linshi/zfy/pic6p/"; 81 82 if (new File(sPath + sName).exists()) { 83 System.out.println("文件存在"); 84 return; 85 } 86 87 try { 88 89 URL url = new URL(imgurl); 90 91 // 打开连接 92 93 HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); 94 95 // 获得文件长度 96 97 long nEndPos = getFileSize(imgurl); 98 99 RandomAccessFile oSavedFile = new RandomAccessFile(sPath + sName,"rw"); 100 101 httpConnection.setRequestProperty("User-Agent", "Internet Explorer"); 102 103 String sProperty = "bytes=" + nStartPos + "-"; 104 105 httpConnection.setRequestProperty("RANGE", sProperty); 106 107 InputStream input = httpConnection.getInputStream(); 108 109 byte[] b = new byte[nRead]; 110 111 int sum = 0; 112 113 int nwrite = 0; 114 115 // 读取网络文件,写入指定的文件中 116 117 while ((nwrite = input.read(b, 0, nRead)) > 0 && nStartPos < nEndPos) { 118 119 oSavedFile.write(b, 0, nwrite); 120 121 nStartPos += nwrite; 122 123 ++sum; 124 125 // 每下载200kb打印一次 126 127 if (sum % (1024 * 256 / nRead) == 0) 128 129 System.out.println("已下载:" 130 + (String.format("%.4f",(double) nStartPos / 1024 / 1024)) 131 + "MB " 132 + String.format("%.2f", (double) nStartPos * 100 / nEndPos) + "%"); 133 134 } 135 136 oSavedFile.close(); 137 138 httpConnection.disconnect(); 139 140 System.out.println("---下载完成---"); 141 142 } catch (Exception e) { 143 144 e.printStackTrace(); 145 146 } 147 } 148 149 // 获得文件长度 150 151 public static long getFileSize(String s) { 152 153 int nFileLength = -1; 154 155 try { 156 157 URL url = new URL(s); 158 159 HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); 160 161 httpConnection.setRequestProperty("User-Agent", "Internet Explorer"); 162 163 int responseCode = httpConnection.getResponseCode(); 164 165 if (responseCode >= 400) { 166 System.err.println("Error Code : " + responseCode); 167 return -2; 168 } 169 170 String sHeader; 171 172 for (int i = 1;; i++) { 173 174 sHeader = httpConnection.getHeaderFieldKey(i); 175 176 if (sHeader != null) { 177 if (sHeader.equals("Content-Length")) { 178 nFileLength = Integer.parseInt(httpConnection.getHeaderField(sHeader)); 179 break; 180 } 181 } else{ 182 break; 183 } 184 } 185 186 } catch (IOException e) { 187 e.printStackTrace(); 188 } catch (Exception e) { 189 e.printStackTrace(); 190 } 191 192 System.out.println("文件大小为:" 193 + String.format("%.4f", (double) nFileLength / 1024 / 1024) 194 + "MB\n"); 195 196 return nFileLength; 197 198 } 199 }
标签:
原文地址:http://www.cnblogs.com/zfy0098/p/5500908.html