java實現網上下載檔案到本地
阿新 • • 發佈:2019-01-24
思路:
要弄清網上下載檔案的一些關鍵邏輯。我們要從網上獲取資訊,第一步必須要有網路連線(connection),接著是你要獲取資訊的路徑(ResourceUrl),然後你要對獲取到的資訊的處理(process),而在這裡我們對資訊的處理是“下載檔案到本地”,下載要確定好儲存位置(SavePath)。
由此,我們可以得到的簡單的思維順序是:建立連線——>得到源url——>確定儲存位置。於是有下面的基本步驟。
基本步驟:
1.建立http連線,獲取連線物件
2.輸入流讀取檔案
3.建立儲存的目錄、儲存的檔名
4.輸出流寫資料
5.關閉流
主要方法:
/**
* 網上獲取檔案
*
* @param savepath 儲存路徑
* @param resurl 資源路徑
* @param fileName 自定義資源名
*/
public void getInternetRes(String savepath, String resurl, String fileName) {
URL url = null;
HttpURLConnection con = null;
InputStream in = null;
FileOutputStream out = null ;
try {
url = new URL(resurl);
//建立http連線,得到連線物件
con = (HttpURLConnection) url.openConnection();
//con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
in = con.getInputStream();
byte[] data = getByteData(in);//轉化為byte陣列
File file = new File(savepath);
if (!file.exists()) {
file.mkdirs();
}
File res = new File(file + File.separator + fileName);
out = new FileOutputStream(res);
out.write(data);
System.out.println("downloaded successfully!");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != out)
out.close();
if (null != in)
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 從輸入流中獲取位元組陣列
*
* @param in
* @return
* @throws IOException
*/
private byte[] getByteData(InputStream in) throws IOException {
byte[] b = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = 0;
while ((len = in.read(b)) != -1) {
bos.write(b, 0, len);
}
if(null!=bos){
bos.close();
}
return bos.toByteArray();
}