Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤與異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 與框架

Java 類引用

Java 有用資源

Java - URL 處理



URL 代表統一資源定位符,它代表全球資訊網上的資源,例如網頁或 FTP 目錄。

本節將向您展示如何編寫與 URL 通訊的 Java 程式。URL 可以分解成以下部分:

protocol://host:port/path?query#ref

協議示例包括 HTTPHTTPS、FTP 和 File。路徑也稱為檔名,主機也稱為授權。

以下是協議為 HTTP 的網頁的 URL:

https://www.amrood.com/index.htm?language=en#j2se

請注意,此 URL 未指定埠,在這種情況下,將使用協議的預設埠。對於 HTTP,預設埠為 80。

建構函式

java.net.URL 類表示 URL,並具有一套完整的用於在 Java 中操作 URL 的方法。

URL 類有幾個用於建立 URL 的建構函式,包括以下這些:

序號 建構函式和說明
1

public URL(String protocol, String host, int port, String file) throws MalformedURLException

透過組合給定的部分建立一個 URL。

2

public URL(String protocol, String host, String file) throws MalformedURLException

與之前的建構函式相同,只是使用給定協議的預設埠。

3

public URL(String url) throws MalformedURLException

從給定的字串建立一個 URL。

4

public URL(URL context, String url) throws MalformedURLException

透過組合 URL 和字串引數來建立一個 URL。

URL 類包含許多用於訪問被表示的 URL 的各個部分的方法。URL 類中的一些方法包括以下這些:

序號 方法和說明
1

public equals(Object obj)

此方法比較此 URL 與另一個物件的相等性。

2

public String getAuthority()

此方法返回 URL 的授權部分。

3

public Object getContent()

此方法返回此 URL 的內容。

4

public Object getContent(Class<?>[] classes)

此方法返回此 URL 的內容。

5

public int getDefaultPort()

此方法返回 URL 協議的預設埠。

6

public String getFile()

此方法返回 URL 的檔名。

7

public String getHost()

此方法返回 URL 的主機。

8

public String getPath()

此方法返回 URL 的路徑。

9

public int getPort()

此方法返回 URL 的埠。

10

public String getProtocol()

此方法返回 URL 的協議。

11

public String getQuery()

此方法返回 URL 的查詢部分。

12

public String getRef()

此方法返回 URL 的引用部分。

13

public String getUserInfo()

此方法返回 URL 的使用者資訊部分。

14

public int hashCode()

此方法建立並返回一個適合雜湊表索引的整數。

15

public URLConnection openConnection()

此方法返回一個 URLConnection 例項,該例項表示與 URL 引用的遠端物件之間的連線。

16

public URLConnection openConnection(Proxy proxy)

此方法的作用與 openConnection() 相同,只是連線將透過指定的代理進行;不支援代理的協議處理程式將忽略 proxy 引數並進行正常的連線。

17

public InputStream openStream()

此方法開啟與此 URL 的連線,並返回一個用於從中讀取連線的 InputStream。

18

public boolean sameFile(URL other)

此方法比較兩個URL,不包括片段元件。

19

public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)

此方法設定應用程式的URLStreamHandlerFactory。

20

public String toExternalForm()

此方法構造並返回此URL的字串表示形式。

21

public String toString()

此方法構造並返回此URL的字串表示形式。

22

public String toURI()

此方法返回與此URL等效的URI。

示例

下面的URLDemo程式演示了URL的各個部分。在命令列上輸入一個URL,URLDemo程式將輸出給定URL的每個部分。

// File Name : URLDemo.java
import java.io.IOException;
import java.net.URL;

public class URLDemo {

   public static void main(String [] args) {
      try {
         URL url = new URL("https://tutorialspoint.tw/index.htm?language=en#j2se");
         
         System.out.println("URL is " + url.toString());
         System.out.println("protocol is " + url.getProtocol());
         System.out.println("authority is " + url.getAuthority());
         System.out.println("file name is " + url.getFile());
         System.out.println("host is " + url.getHost());
         System.out.println("path is " + url.getPath());
         System.out.println("port is " + url.getPort());
         System.out.println("default port is " + url.getDefaultPort());
         System.out.println("query is " + url.getQuery());
         System.out.println("ref is " + url.getRef());
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

此程式的示例執行將產生以下結果:

輸出

URL is https://tutorialspoint.tw/index.htm?language=en#j2se
protocol is https
authority is www.tutorialspoint.com
file name is /index.htm?language=en
host is www.tutorialspoint.com
path is /index.htm
port is -1
default port is 443
query is language=en
ref is j2se

URLConnections 類方法

openConnection() 方法返回一個 **java.net.URLConnection**,這是一個抽象類,其子類代表各種型別的URL連線。

例如:

  • 如果連線到協議為HTTP的URL,則openConnection()方法將返回一個HttpURLConnection物件。

  • 如果連線到表示JAR檔案的URL,則openConnection()方法將返回一個JarURLConnection物件,等等。

URLConnection類有很多方法可以設定或確定有關連線的資訊,包括以下這些:

序號 方法和說明
1

void addRequestProperty(String key, String value)

新增由鍵值對指定的通用請求屬性。

2

boolean getAllowUserInteraction()

返回此物件的 allowUserInteraction 欄位的值。

3

int getConnectTimeout()

返回連線超時設定。

4

Object getContent()

檢索此URL連線的內容。

5

Object getContent(Class[] classes)

檢索此URL連線的內容。

6

String getContentEncoding()

返回content-encoding標頭欄位的值。

7

int getContentLength()

返回content-length標頭欄位的值。

8

long getContentLengthLong()

返回content-length標頭欄位的值(長整型)。

9

String getContentType()

返回content-type標頭欄位的值。

10

long getDate()

返回date標頭欄位的值。

11

static boolean getDefaultAllowUserInteraction()

返回AllowUserInteraction欄位的預設值。

12

boolean getDefaultUseCaches()

返回URLConnection的useCaches標誌的預設值。

13

static boolean getDefaultUseCaches(String protocol)

返回給定協議的useCaches標誌的預設值。

14

boolean getDoInput()

返回此URLConnection的doInput標誌的值。

15

boolean getDoOutput()

返回此URLConnection的doOutput標誌的值。

16

long getExpiration()

返回expires標頭欄位的值。

17

static FileNameMap getFileNameMap()

從資料檔案載入檔名對映(mimetable)。

18

String getHeaderField(int n)

返回第n個標頭欄位的值。

19

String getHeaderField(String name)

返回指定名稱的標頭欄位的值。

20

long getHeaderFieldDate(String name, long Default)

返回作為日期解析的指定欄位的值。

21

int getHeaderFieldInt(String name, int Default)

返回作為數字解析的指定欄位的值。

22

String getHeaderFieldKey(int n)

返回第n個標頭欄位的鍵。

23

long getHeaderFieldLong(String name, long Default)

返回作為數字解析的指定欄位的值。

24

Map<String,List<String>> getHeaderFields()

返回標頭欄位的不可修改的Map。

25

long getIfModifiedSince()

返回此物件的ifModifiedSince欄位的值。

26

InputStream getInputStream()

返回一個從這個開啟的連線讀取的輸入流。

27

int getLastModified()

返回last-modified標頭欄位的值。

28

OutputStream getOutputStream()

返回一個寫入此連線的輸出流。

29

Permission getPermission()

返回一個許可權物件,表示對此物件表示的連線進行連線所需的許可權。

30

int getReadTimeout()

返回讀取超時設定。返回0表示該選項已停用(即無限超時)。

31

Map<String,List<String>> getRequestProperties()

返回此連線的通用請求屬性的不可修改的Map。

32

String getRequestProperty(String key)

返回此連線的指定通用請求屬性的值。

33

URL getURL()

返回此URLConnection的URL欄位的值。

34

boolean getUseCaches()

返回此URLConnection的useCaches欄位的值。

35

static String guessContentTypeFromName(String fname)

嘗試根據URL的指定“檔案”元件確定物件的content type。

36

static String guessContentTypeFromStream(InputStream is)

嘗試根據輸入流開頭的字元確定輸入流的型別。

37

void setAllowUserInteraction(boolean allowuserinteraction)

設定此URLConnection的AllowUserInteraction欄位的值。

38

void setConnectTimeout(int timeout)

設定一個指定的超時值(以毫秒為單位),用於開啟到此URLConnection引用的資源的通訊連結。

39

static void setContentHandlerFactory(ContentHandlerFactory fac)

設定應用程式的ContentHandlerFactory。

40

static void setDefaultAllowUserInteraction(boolean defaultallowuserinteraction)

將所有未來URLConnection物件的AllowUserInteraction欄位的預設值設定為指定值。

41

void setDefaultUseCaches(boolean defaultusecaches)

將useCaches欄位的預設值設定為指定值。

42

static void setDefaultUseCaches(String protocol, boolean defaultVal)

將指定協議的useCaches欄位的預設值設定為給定值。

43

void setDoInput(boolean doinput)

將此URLConnection的doInput欄位的值設定為指定值。

44

void setDoOutput(boolean dooutput)

將此URLConnection的doOutput欄位的值設定為指定值。

45

static void setFileNameMap(FileNameMap map)

設定FileNameMap。

46

void setIfModifiedSince(long ifmodifiedsince)

將此URLConnection的ifModifiedSince欄位的值設定為指定值。

47

void setReadTimeout(int timeout)

將讀取超時設定為指定的超時值(以毫秒為單位)。

48

void setRequestProperty(String key, String value)

設定通用請求屬性。

49

void setUseCaches(boolean usecaches)

將此URLConnection的useCaches欄位的值設定為指定值。

50

String toString()

返回此URL連線的字串表示形式。

示例

下面的URLConnectionDemo程式連線到從命令列輸入的URL。

如果URL表示HTTP資源,則連線將轉換為HttpURLConnection,並且資源中的資料將一次一行地讀取。

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class URLConnDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("https://tutorialspoint.tw");
         URLConnection urlConnection = url.openConnection();
         HttpURLConnection connection = null;
         if(urlConnection instanceof HttpURLConnection) {
            connection = (HttpURLConnection) urlConnection;
         }else {
            System.out.println("Please enter an HTTP URL.");
            return;
         }
         
         BufferedReader in = new BufferedReader(
            new InputStreamReader(connection.getInputStream()));
         String urlString = "";
         String current;
         
         while((current = in.readLine()) != null) {
            urlString += current;
         }
         System.out.println(urlString);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

此程式的示例執行將產生以下結果:

輸出

$ java URLConnDemo

.....a complete HTML content of home page of tutorialspoint.com.....
java_networking.htm
廣告