Java讀取並下載網絡文件


CreateTime--2017年8月21日10:11:07

Author:Marydon

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Java讀取並下載網絡文件
 * @author Marydon
 * @createTime 2017年8月18日下午5:24:09
 * @updateTime
 * @Email:marydon2017@163.com
 * @version:1.0.0
 * @referenceLink
 *  <a href="http://blog.csdn.net/xb12369/article/details/40543649/"> java 從網絡Url中下載文件</a>
 */
public class DownloadFromNetwork {
    /** 
     * 從網絡Url中下載文件 
     * @param urlStr 
     * @param fileName 
     * @param savePath 
     * @throws IOException 
     */  
    public static void  downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{  
        URL url = new URL(urlStr);    
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();    
                //設置超時間為3秒  
        conn.setConnectTimeout(3*1000);  
        //防止屏蔽程序抓取而返回403錯誤  
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
  
        //得到輸入流  
        InputStream inputStream = conn.getInputStream();    
        //獲取自己數組  
        byte[] getData = readInputStream(inputStream);      
  
        //文件保存位置  
        File saveDir = new File(savePath);  
        if(!saveDir.exists()){  
            saveDir.mkdirs();  
        }  
        File file = new File(saveDir+File.separator+fileName);      
        FileOutputStream fos = new FileOutputStream(file);       
        fos.write(getData);   
        if(fos!=null){  
            fos.close();    
        }  
        if(inputStream!=null){  
            inputStream.close();  
        }  
  
        System.out.println("info:"+url+" download success");   
  
    }  
  
    /** 
     * 從輸入流中獲取字節數組 
     * @param inputStream 
     * @return 
     * @throws IOException 
     */  
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {    
        byte[] buffer = new byte[1024];    
        int len = 0;    
        ByteArrayOutputStream bos = new ByteArrayOutputStream();    
        while((len = inputStream.read(buffer)) != -1) {    
            bos.write(buffer, 0, len);    
        }    
        bos.close();    
        return bos.toByteArray();    
    }    
}
測試:
public static void main(String[] args) {  
    try{  
        for (int i = 201; i <=520; i++) {
            downLoadFromUrl("https://ss1.bdstatic.com/kvoZeXSm1A5BphGlnYG/skin/" + i + ".jpg",i + ".jpg","E:/Downloads/wallpaper/baiduSkin");  
        }
    }catch (Exception e) {  
        e.printStackTrace();
    }  
}
說明:
  上面的方法適用於URL就是要文件下載地址(如圖片),批量下載的話,也必須是有規律可詢的才行,該網頁有且只有一個文件
  比如:要想下載某個網頁上所有的網絡圖片,使用這種方法會變得比較繁瑣,因為你必須精確的知道該網頁上每個圖片的有效網址,
  當批量下載單個網頁上的圖片時,我總結了兩套方案:
  方案一:javascript+java(基於這種方式的實現),詳情請移步至: 批量下載圖片
  方案二:純java實現,詳情請移步至: 自定義-網絡圖片下載工具類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM