• java下载文件


      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
    ");
    195 
    196         return nFileLength;
    197 
    198     }
    199 }
  • 相关阅读:
    MySQL++:MySQL 复合索引、普通索引总结
    AutoCAD 二次开发之python(学习中)
    APScheduler 学习笔记
    pylint 定制化配置/使用 -待整理
    JDK和CGLIB动态代理区别
    Java 类加载过程
    判断字符串是否是数字类型
    Java 并发编程锁工具
    花式写挂
    WC2021 题目清单
  • 原文地址:https://www.cnblogs.com/zfy0098/p/5500908.html
Copyright © 2020-2023  润新知