標籤:exce system getc style classes cat webapp html family
Java的網路類可以讓你通過網路或者遠端連線來實現應用。而且,這個平台現在已經可以對國際互連網以及URL資源進行訪問了。Java的URL類可以讓訪問網路資源就像是訪問你本地的檔案夾一樣方便快捷。我們通過使用Java的URL類就可以經由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”);
在這個例子中,我們建立了一個使用完整URL的URL 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 classes對URL進行寫的操作同樣也是非常簡單的。一旦你建立了一個成功的串連之後,你就可以得到來自此串連的輸出資料流並且開始進行寫的操作。當然,只有對於客戶所希望的資料進行寫的操作才是有意義的。同樣的,在獲得並對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;
public class URLConnectionTest {
public static void 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);
}
}
}
JAVA中三種URL串連方法