轉:https://www.cnblogs.com/blackiesong/p/6182038.html
Java的URL類(一)
Java的網絡類可以讓你通過網絡或者遠程連接來實現應用。而且,這個平台現在已經可 以對國際互聯網以及URL資源進行訪問了。Java的URL類可以讓訪問網絡資源就像是訪問你本地的文件夾一樣方便快捷。我們通過使用Java的URL類 就可以經由URL完成讀取和修改數據的操作。
通過一個URL連接,我們就可以確定資源的位置,比如網絡文件、網絡頁面以及網絡應用程序等。其中包含了許多的語法元素。
從URL得到的數據可以是多種多樣的,這些都需要一種統一的機制來完成對URL的讀取與修改操作。Java語言在它的java.net軟件包里就提供了這么一種機制。
URL class是從URL標示符中提取出來的。它允許Java程序設計人員打開某個特定URL連接,並對里邊的數據進行讀寫操作以及對首部信息進行讀寫操作。而且,它還允許程序員完成其它的一些有關URL的操作。
構造
在創建java.net URL的實例的時候,你能夠利用許多公共構造器,從而讓其變得更具靈活性。舉個例子來說,這個class提供了一種使用完整URL信息串的構造器,一種使 用把URL信息串分解成為協議、主機名以及文件和資源的構造器,還有一種把URL信息串分解成為協議、主機名、端口號以及文件的構造器。我們首先使用完整 的URL來創建一個URL class的例子:
URL aURL = new URL(“http://www.mycompany.com:8080/index.html”);
在這個例子中,我們創建了一個使用完整URL的URL class,其中明確指出了使用的協議是http,主機名稱是www.mycompany.com,端口號碼為8080,文件/資源為 index.html。如果組成URL的語法發生了錯誤,那么構造器就會發出MalformedURLException。
連接
一旦你成功的創建了一個URL class的實例,你就可以對其進行操作了。但是在你能夠訪問這個URL上的資源和內容之前,你必須要打開到這些資源與內容上的連接。你可以通過使用openConnection來完成這一操作。
使用openConnection並不需要參數,並且在操作成功之后,它會返回一個URLConnection class的實例。在Listing A中,向我們演示了打開一個到URL連接的過程。一旦你的連接成功,你就可以開始對這個URLConnection的輸入以及輸出流進行讀和寫的操作了。
從URL連接中讀取數據
使用java.io stream class來從URL中讀取數據是一個非常簡單的過程。一旦你建立了一個成功的連接,那么你就可以獲得針對這個連接的輸入流並且開始進行寫的操作了。很幸 運的是,java.io classes可以以與對文件流或者socket流進行操作的同樣方式進行對從URLConnection流返回的數據進行操作。
對URL進行寫的操作
使用java.io stream classes對URL進行寫的操作同樣也是非常簡單的。一旦你建立了一個成功的連接之后,你就可以得到來自此連接的輸出流並且開始進行寫的操作。當然, 只有對於客戶所希望的數據進行寫的操作才是有意義的。同樣的,在獲得並對URLConnection流進行寫的操作之前,你還需要使用 setDoOutput(boolean)方式把輸出(Output)屬性設置為真(true)來指定可以進行寫操作的那些連接。Java.io classes允許你把數據寫到URLConnection流,這個操作也和你對文件流和socket流進行的寫操作一樣。
其它的操作
你可以從URL以及URLConnection對象連接中得到其它類型的信息,比如說主機名、端口、內容長度、內容編碼以及內容的類型。把這些方法連同stream I/O classes一起使用可以讓你建立復雜而有效的網絡客戶應用程序和服務。
對網絡的便捷訪問
由Java平台所提供的URL class讓我們可以方便而有效的訪問網絡上的資源,而且可以讓我們象訪問本地文件一樣的感到輕松愉快。我們不用為網絡通訊的細節問題操心,只需要把注意力集中到制作有用的應用程序和服務上去。
三種連接方法:
// 方法一 URL url = new URL("http://www.sina.com.cn"); URLConnection urlcon = url.openConnection(); InputStream is = urlcon.getInputStream(); // 方法二 URL url = new URL("http://www.yhfund.com.cn"); HttpURLConnection urlcon = (HttpURLConnection)url.openConnection(); InputStream is = urlcon.getInputStream(); //方法三 URL url = new URL("http://www.yhfund.com.cn"); InputStream is = url.openStream();
具體例子:
long begintime = System.currentTimeMillis(); URL url = new URL("http://www.yhfund.com.cn"); HttpURLConnection urlcon = (HttpURLConnection)url.openConnection(); urlcon.connect(); //獲取連接 InputStream is = urlcon.getInputStream(); BufferedReader buffer = new BufferedReader(new InputStreamReader(is)); StringBuffer bs = new StringBuffer(); String l = null; while((l=buffer.readLine())!=null){ bs.append(l).append("/n"); } System.out.println(bs.toString()); //System.out.println(" content-encode:"+urlcon.getContentEncoding()); //System.out.println(" content-length:"+urlcon.getContentLength()); //System.out.println(" content-type:"+urlcon.getContentType()); //System.out.println(" date:"+urlcon.getDate()); System.out.println("總共執行時間為:"+(System.currentTimeMillis()-begintime)+"毫秒"); }catch(IOException e){ System.out.println(e); } } }