Java 從指定URL下載檔案並儲存到指定目錄

王萌萌萌發表於2018-05-31

從指定的URL下載檔案,並儲存到本地,近期開發過程中用的這個功能比較多,特此記錄!

1.基本流程

當我們想要下載網站上的某個資源時,我們會獲取一個url,它是伺服器定位資源的一個描述,下載的過程有如下幾步:

(1)客戶端發起一個url請求,獲取連線物件。

(2)伺服器解析url,並且將指定的資源返回一個輸入流給客戶。

(3)建立儲存的目錄以及儲存的檔名。

(4)輸出了寫資料。

(5)關閉輸入流和輸出流。


2.實現程式碼的方法

/**  
 * @從制定URL下載檔案並儲存到指定目錄
 * @param filePath 檔案將要儲存的目錄  
 * @param method 請求方法,包括POST和GET  
 * @param url 請求的路徑  
 * @return  
 */  
  
public static File saveUrlAs(String url,String filePath,String method){  
     //System.out.println("fileName---->"+filePath);  
     //建立不同的資料夾目錄  
     File file=new File(filePath);  
     //判斷資料夾是否存在  
     if (!file.exists())  
    {  
        //如果資料夾不存在,則建立新的的資料夾  
         file.mkdirs();  
    }  
     FileOutputStream fileOut = null;  
     HttpURLConnection conn = null;  
     InputStream inputStream = null;  
     try  
    {  
         // 建立連結  
         URL httpUrl=new URL(url);  
         conn=(HttpURLConnection) httpUrl.openConnection();  
         //以Post方式提交表單,預設get方式  
         conn.setRequestMethod(method);  
         conn.setDoInput(true);    
         conn.setDoOutput(true);  
         // post方式不能使用快取   
         conn.setUseCaches(false);  
         //連線指定的資源   
         conn.connect();  
         //獲取網路輸入流  
         inputStream=conn.getInputStream();  
         BufferedInputStream bis = new BufferedInputStream(inputStream);  
         //判斷檔案的儲存路徑後面是否以/結尾  
         if (!filePath.endsWith("/")) {  
  
             filePath += "/";  
  
             }  
         //寫入到檔案(注意檔案儲存路徑的後面一定要加上檔案的名稱)  
         fileOut = new FileOutputStream(filePath+"123.png");  
         BufferedOutputStream bos = new BufferedOutputStream(fileOut);  
           
         byte[] buf = new byte[4096];  
         int length = bis.read(buf);  
         //儲存檔案  
         while(length != -1)  
         {  
             bos.write(buf, 0, length);  
             length = bis.read(buf);  
         }  
         bos.close();  
         bis.close();  
         conn.disconnect();  
    } catch (Exception e)  
    {  
         e.printStackTrace();  
         System.out.println("丟擲異常!!");  
    }  
       
     return file;  
       
 }  

3.測試類

/**  
 * @param args  
 */  
public static void main(String[] args)  
{  
    String photoUrl = "123.png";   //檔案URL地址                                     
    String fileName = photoUrl.substring(photoUrl.lastIndexOf("/"));     //為下載的檔案命名
    String filePath = "d:";      //儲存目錄
    File file = saveUrlAs(photoUrl, filePath + fileName,"GET");    
}  



相關文章