1. 程式人生 > >Java 從網頁指定URL獲取檔案

Java 從網頁指定URL獲取檔案

這個問題我也搜過,但是搜到的程式碼都沒有什麼註釋,不方便理解;
或者就是自己對IO流的理解不深,註解也不太好看懂.
於是我在查閱了一些博主關於IO流的描述後,自己寫了一個只用一層的IO流完成從網頁指定URL獲取檔案的操作,並添加了註釋,方便理解.
不過最簡單,也就意味著低效,未優化.之後會補上通過新增IO層的方法來提升效率的方法

關於Java IO流介紹的博文,推薦以下幾個:
Java IO詳解
Java IO流學習總結

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import
java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; public class Util { public static void main(String[] args) { // TODO Auto-generated method stub String pathname="/Users/hyl/Documents/test.gif";//該地址為macos下的地址,若要測試,請修改為對應的地址
File file=new File(pathname); String urlstr="https://www.baidu.com/img/baidu_jgylogo3.gif";//此處為指定指定圖片的url,以百度logo為例 boolean success=naiveDownloadPicture(file, urlstr); System.out.println(success?"success":"false"); } //最簡url圖片下載 public static boolean naiveDownloadPicture
(File file,String urlstr) { URL url = null; try { //生成圖片連結的url類 url = new URL(urlstr); //將url連結下的圖片以位元組流的形式儲存到 DataInputStream類中 DataInputStream dataInputStream = new DataInputStream(url.openStream()); //為file生成對應的檔案輸出流 FileOutputStream fileOutputStream = new FileOutputStream(file); //定義位元組陣列大小 byte[] buffer = new byte[1024]; //從所包含的輸入流中讀取[buffer.length()]的位元組,並將它們儲存到緩衝區陣列buffer 中。 //dataInputStream.read()會返回寫入到buffer的實際長度,若已經讀完 則返回-1 while (dataInputStream.read(buffer) > 0) { fileOutputStream.write(buffer);//將buffer中的位元組寫入檔案中區 } dataInputStream.close();//關閉輸入流 fileOutputStream.close();//關閉輸出流 return true; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } }