Java 從網頁指定URL獲取檔案
阿新 • • 發佈:2018-12-22
這個問題我也搜過,但是搜到的程式碼都沒有什麼註釋,不方便理解;
或者就是自己對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;
}
}