1. 程式人生 > >java實現網上下載檔案到本地

java實現網上下載檔案到本地

思路:
要弄清網上下載檔案的一些關鍵邏輯。我們要從網上獲取資訊,第一步必須要有網路連線(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();
    }