1. 程式人生 > >JAVA中三種URL連線方法

JAVA中三種URL連線方法

JAVA中三種URL連線方法

Java的網路類可以讓你通過網路或者遠端連線來實現應用。而且,這個平臺現在已經可以對國際網際網路以及URL資源進行訪問了。JavaURL類可以讓訪問網路資源就像是訪問你本地的資料夾一樣方便快捷。我們通過使用JavaURL類就可以經由URL完成讀取和修改資料的操作。現在,我們來看一看,如何才能發揮出URL類的效力。  通過URL進行工作  通過一個URL連線,我們就可以確定資源的位置,比如網路檔案、網路頁面以及網路應用程式等。其中包含了許多的語法元素。舉個例子來說,請看下面這個URL連線:http://www.mycompany.com:8080/mywebapps/AWebApp

  這個連線規定使用http協議。主機名稱為www.mycompany.com。埠號為8080。這個URL的其它部分, /mywebapps/AwebApp,則確定了我們要在這個站點上所要訪問的資源。在這個例子中的資源恰好是一個網路應用程式。而且,URL還可以包含其它的元素,比如說檔案段以及查詢資訊等等。  從URL得到的資料可以是多種多樣的,這些都需要一種統一的機制來完成對URL的讀取與修改操作。Java語言在它的java.net軟體包裡就提供了這麼一種機制。有關這個java.net軟體包的問題我們會在URL class的部分中進行討論。URL class是從URL標示符中提取出來的。它允許Java
程式設計人員開啟某個特定URL連線,並對裡邊的資料進行讀寫操作以及對首部資訊進行讀寫操作。而且,它還允許程式設計師完成其它的一些有關URL的操作。我們將會討論由java.io包裹所提供的URL class以及stream classes是如何允許你對一個URL進行操作的,而且我們將會以對檔案以及socket連線的操作差不多的風格對其進行討論。  構造器  在建立java.net URL的例項的時候,你能夠利用許多公共構造器,從而讓其變得更具靈活性。舉個例子來說,這個class提供了一種使用完整URL資訊串的構造器,一種使用把URL資訊串分解成為協議、主機名以及檔案和資源的構造器,還有一種把URL
資訊串分解成為協議、主機名、埠號以及檔案的構造器。我們首先使用完整的URL來建立一個URL class的例子:URL aURL = new URL(“http://www.mycompany.com:8080/index.html”);

  在這個例子中,我們建立了一個使用完整URLURL class,其中明確指出了使用的協議是http,主機名稱是www.mycompany.com,埠號碼為8080,檔案/資源為index.html。如果組成URL的語法發生了錯誤,那麼構造器就會發出MalformedURLException。開啟一個URL連線  一旦你成功的建立了一個URL class的例項,你就可以對其進行操作了。但是在你能夠訪問這個URL上的資源和內容之前,你必須要開啟到這些資源與內容上的連線。你可以通過使用openConnection來完成這一操作。  使用openConnection並不需要引數,並且在操作成功之後,它會返回一個URLConnection class的例項。在Listing A中,向我們演示了開啟一個到URL連線的過程。一旦你的連線成功,你就可以開始對這個URLConnection的輸入以及輸出流進行讀和寫的操作了。  從URL連線中讀取資料  使用java.io stream class來從URL中讀取資料是一個非常簡單的過程。一旦你建立了一個成功的連線,那麼你就可以獲得針對這個連線的輸入流並且開始進行寫的操作了。URL可以代表很多不同種類的資料型別所組成的資源。很幸運的是,java.io classes可以以與對檔案流或者socket流進行操作的同樣方式進行對從URLConnection流返回的資料進行操作。在Listing B中,向我們展示瞭如何從URL中讀取文字資料。  對URL進行寫的操作  使用java.io stream classesURL進行寫的操作同樣也是非常簡單的。一旦你建立了一個成功的連線之後,你就可以得到來自此連線的輸出流並且開始進行寫的操作。當然,只有對於客戶所希望的資料進行寫的操作才是有意義的。同樣的,在獲得並對URLConnection流進行寫的操作之前,你還需要使用setDoOutput(boolean)方式把輸出(Output)屬性設定為真(true)來指定可以進行寫操作的那些連線。Java.io classes允許你把資料寫到URLConnection流,這個操作也和你對檔案流和socket流進行的寫操作一樣。Listing C向我們展示瞭如何把物件資料寫入一個URL  其它的操作  你可以從URL以及URLConnection物件連線中得到其它型別的資訊,比如說主機名、埠、內容長度、內容編碼以及內容的型別。把這些方法連同stream I/O classes一起使用可以讓你建立複雜而有效的網路客戶應用程式和服務。  對網路的便捷訪問  由Java平臺所提供的URL class讓我們可以方便而有效的訪問網路上的資源,而且可以讓我們象訪問本地檔案一樣的感到輕鬆愉快。我們不用為網路通訊的細節問題操心,只需要把注意力集中到製作有用的應用程式和服務上去。

例子:

package zzm.java.net;

import java.net.URLConnection;

import java.net.HttpURLConnection;

import java.net.JarURLConnection;

import java.net.URL;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.InputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

publicclass URLConnectionTest {

publicstaticvoid main(String []args){

try{

/*

* 方法一

*

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);

}

}

}