使用url下載網絡圖片的時候,首先需要建立一個URL對象,然后使用一個輸入流獲取該URL中的內容。之后使用讀取該輸入流的內容,使用一個輸出流寫到本地文件中。最后關閉輸入和輸出流。下面是一個簡單的下載代碼。
public static void download(String urlString, String filename, String savePath) { URL url = null; OutputStream os = null; URLConnection con = null; InputStream is = null; try { url = new URL(urlString); con = url.openConnection(); con.setConnectTimeout(5 * 1000); is = con.getInputStream(); byte[] bs = new byte[1024]; int len; File sf = new File(savePath); if (!sf.exists()) { sf.mkdirs(); } os = new FileOutputStream(sf.getPath() + "\\" + filename); while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } } catch (IOException e1) { e1.printStackTrace(); } finally { try { if(os != null) os.close(); } catch (IOException e1) { e1.printStackTrace(); } try { if(is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } } } }
什么是流。
流是一個抽象的概念,是對輸入輸出設備的抽象,java程序中,對於程序的輸入輸出操作都是以"流"的方式進行。設備可以是文件,網絡,內存等。
流具有方向,至於是輸入流還是輸出流則是一個相對的概念,一般以程序為參考,如果數據的流向是程序至設備,我們稱之為輸出流,反之我們稱為輸入流。
當文件需要從某個數據源讀入數據的時候,就會開啟一個輸入流,數據源可以是文件、內存或網絡等等。相反的,需要寫出數據到某個數據源目的地的時候,也會開 啟一個輸出流,這個數據源目的地也可以是文件、內存或網絡等等。流的使用結束必須關閉流,如果不進行關閉的化會一直占用內存可能早成內存的泄露。
總結:
數據流:一組有序,有起點和終點的字節的數據序列。包括輸入流和輸出流。
輸入流:程序從輸入流讀取數據源。數據源包括外界(鍵盤、文件、網絡),即將數據讀入程序的通信通道。
輸出流:程序向輸出流寫入數據。將程序中的數據輸出到外界(顯示器、文件、網絡)的通信通道。
數據的傳輸就是數據流的傳輸,流的重定向就是輸入或者輸出的改變。
流有哪些分類
可以從不同的角度對流進行分類:
1、處理的數據單位不同,可分為:字符流,字節流
2、數據流方向不同,可分為:輸入流,輸出流
3、功能不同,可分為:節點流,處理流
節點流:節點流從一個特定的數據源讀寫數據。即節點流是直接操作文件,網絡等的流。例如FileInputStream和FileOutputStream,他們直接從文中讀取或往文中寫入字節流。
處理流:“連接”在已存在的流之上通過對數據的處理為程序提供更加強大的讀寫功能。處理流是使用一個已經存在的輸入流或輸出流連接創建的,過濾流就 是對節點流進行一系列的包裝例如BufferedInputStream和BufferedOutputStream,使用已經存在的節點流來構建,提供 帶緩沖的讀寫,提高了讀寫的效率。
字節流和字符流的區別:
1.讀寫單位不同:字節流以字節為單位讀取,字符流以字符為單位,根據編碼表映射字符一次可以讀取多個字節。
2.處理對象不同:字節流能處理所有的類型數據,而字符流只能處理字符類型的數據。
3.字節流在操作的時候是不會用到緩沖區的,是文件本身的直接操作;而字符流在操作的時候會用到緩沖區。
結論:優先使用字節流。首先因為硬盤上的所有文件都是以字節的形式進行傳輸或者保存的,包括圖片等內容。但是字符只是在內存中才會形成的,所以在開發中,字節流使用廣泛。
IOException異常類的子類
1.public class EOFException :
非正常到達文件尾或輸入流尾時,拋出這種類型的異常。
2.public class FileNotFoundException:
當文件找不到時,拋出的異常。
3.public class InterruptedIOException:
當I/O操作被中斷時,拋出這種類型的異常