W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
java.lang.Object
|---java.net.URL
public final class URL
extends Object
implements Serializable
類 URL 代表一個(gè)統(tǒng)一資源定位器,一個(gè)指向萬維網(wǎng)上“資源”的指針。 資源可以是文件或目錄等簡(jiǎn)單的東西,也可以是對(duì)更復(fù)雜對(duì)象的引用,例如對(duì)數(shù)據(jù)庫或搜索引擎的查詢。
通常,一個(gè) URL 可以分為幾個(gè)部分。 考慮以下示例:
http://www.example.com/docs/resource1.html
上面的 URL 表明要使用的協(xié)議是 http(超文本傳輸協(xié)議),并且信息駐留在名為 www.example.com 的主機(jī)上。 該主機(jī)上的信息名為 /docs/resource1.html。 該名稱在主機(jī)上的確切含義既依賴于協(xié)議,也依賴于主機(jī)。 信息通常駐留在文件中,但也可以即時(shí)生成。 URL 的這個(gè)組件稱為路徑組件。
URL 可以選擇指定一個(gè)“端口”,它是在遠(yuǎn)程主機(jī)上建立 TCP 連接的端口號(hào)。 如果未指定端口,則使用協(xié)議的默認(rèn)端口。 例如,http 的默認(rèn)端口是 80。替代端口可以指定為:
http://www.example.com:1080/docs/resource1.html
URL 的語法由 RFC 2396 定義:統(tǒng)一資源標(biāo)識(shí)符 (URI):通用語法,由 RFC 2732 修訂:URL 中文字 IPv6 地址的格式。 Literal IPv6 地址格式也支持 scope_ids。 此處描述了 scope_ids 的語法和用法。
URL 可能附加了一個(gè)“片段”,也稱為“參考”或“參考”。 片段由尖號(hào)字符“#”表示,后跟更多字符。 例如,
http://java.sun.com/index.html#chapter1
此片段在技術(shù)上不是 URL 的一部分。 相反,它表示在檢索到指定資源后,應(yīng)用程序?qū)ξ臋n中附加了標(biāo)簽 chapter1 的那部分特別感興趣。 標(biāo)簽的含義是資源特定的。
應(yīng)用程序還可以指定一個(gè)“相對(duì) URL”,它只包含足夠的信息來訪問相對(duì)于另一個(gè) URL 的資源。 相對(duì) URL 經(jīng)常在 HTML 頁面中使用。 例如,如果 URL 的內(nèi)容:
http://java.sun.com/index.html
其中包含相對(duì) URL:
FAQ.html
這將是以下的簡(jiǎn)寫:
http://java.sun.com/FAQ.html
相對(duì) URL 不需要指定 URL 的所有組成部分。 如果缺少協(xié)議、主機(jī)名或端口號(hào),則從完全指定的 URL 繼承該值。 必須指定文件組件。 可選片段不被繼承。
URL 類本身并不根據(jù) RFC2396 中定義的轉(zhuǎn)義機(jī)制對(duì)任何 URL 組件進(jìn)行編碼或解碼。 調(diào)用者有責(zé)任對(duì)在調(diào)用 URL 之前需要轉(zhuǎn)義的任何字段進(jìn)行編碼,并對(duì)從 URL 返回的任何轉(zhuǎn)義字段進(jìn)行解碼。 此外,由于 URL 不知道 URL 轉(zhuǎn)義,因此它無法識(shí)別同一 URL 的編碼或解碼形式之間的等價(jià)性。 例如,兩個(gè) URL:
http://foo.com/hello world/ and http://foo.com/hello%20world
將被視為彼此不相等。
請(qǐng)注意,URI 類在某些情況下會(huì)執(zhí)行其組件字段的轉(zhuǎn)義。 管理 URL 編碼和解碼的推薦方法是使用 URI,并使用 toURI() 和 URI#toURL() 在這兩個(gè)類之間進(jìn)行轉(zhuǎn)換。
URLEncoder 和 URLDecoder 類也可以使用,但僅用于 HTML 表單編碼,與 RFC2396 中定義的編碼方案不同。
構(gòu)造函數(shù) | 描述 |
---|---|
URL(String spec) | 從 String 表示創(chuàng)建一個(gè) URL 對(duì)象。 |
URL(String protocol, String host, int port, String file) | 從指定的協(xié)議、主機(jī)、端口號(hào)和文件創(chuàng)建 URL 對(duì)象。 |
URL(String protocol, String host, int port, String file, URLStreamHandler handler) | 從指定的協(xié)議、主機(jī)、端口號(hào)、文件和處理程序創(chuàng)建一個(gè) URL 對(duì)象。 |
URL(String protocol, String host, String file) | 從指定的協(xié)議名、主機(jī)名和文件名創(chuàng)建 URL。 |
URL(URL context, String spec) | 通過在指定上下文中解析給定規(guī)范來創(chuàng)建 URL。 |
URL(URL context, String spec, URLStreamHandler handler) | 通過在指定上下文中使用指定處理程序解析給定規(guī)范來創(chuàng)建 URL。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
boolean | equals(Object obj) | 將此 URL 與另一個(gè)對(duì)象進(jìn)行比較是否相等。 |
String | getAuthority() | 獲取此 URL 的權(quán)限部分。 |
Object | getContent() | 獲取此 URL 的內(nèi)容。 |
Object | getContent(Class[] classes) | 獲取此 URL 的內(nèi)容。 |
int | getDefaultPort() | 獲取與此 URL 關(guān)聯(lián)的協(xié)議的默認(rèn)端口號(hào)。 |
String | getFile() | 獲取此 URL 的文件名。 |
String | getHost() | 獲取此 URL 的主機(jī)名(如果適用)。 |
String | getPath() | 獲取此 URL 的路徑部分。 |
int | getPort() | 獲取此 URL 的端口號(hào)。 |
String | getProtocol() | 獲取此 URL 的協(xié)議名稱。 |
String | getQuery() | 獲取此 URL 的查詢部分。 |
String | getRef() | 獲取此 URL 的錨點(diǎn)(也稱為“引用”)。 |
String | getUserInfo() | 獲取此 URL 的 userInfo 部分。 |
int | hashCode() | 創(chuàng)建一個(gè)適合哈希表索引的整數(shù)。 |
URLConnection | openConnection() | 返回一個(gè) URLConnection 實(shí)例,該實(shí)例表示與 URL 引用的遠(yuǎn)程對(duì)象的連接。 |
URLConnection | openConnection(Proxy proxy) | 與 openConnection() 相同,只是連接將通過指定的代理進(jìn)行; 不支持代理的協(xié)議處理程序?qū)⒑雎源韰?shù)并建立正常連接。 |
InputStream | openStream() | 打開到此 URL 的連接并返回一個(gè) InputStream 以從該連接中讀取。 |
boolean | sameFile(URL other) | 比較兩個(gè) URL,不包括片段組件。 |
static void | setURLStreamHandlerFactory(URLStreamHandlerFactory fac) | 設(shè)置應(yīng)用程序的 URLStreamHandlerFactory。 |
String | toExternalForm() | 構(gòu)造此 URL 的字符串表示形式。 |
String | toString() | 構(gòu)造此 URL 的字符串表示形式。 |
URI | toURI() | 返回與此 URL 等效的 URI。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
public URL(String protocol, String host, int port, String file) throws MalformedURLException
從指定的協(xié)議、主機(jī)、端口號(hào)和文件創(chuàng)建 URL 對(duì)象。
host 可以表示為主機(jī)名或文字 IP 地址。 如果使用 IPv6 文字地址,則應(yīng)將其括在方括號(hào)中('[' 和 ']'),如 RFC 2732 所指定; 但是,也接受 RFC 2373:IP 版本 6 尋址體系結(jié)構(gòu)中定義的文字 IPv6 地址格式。
指定端口號(hào) -1 表示 URL 應(yīng)使用協(xié)議的默認(rèn)端口。
如果這是使用指定協(xié)議創(chuàng)建的第一個(gè) URL 對(duì)象,則會(huì)為該協(xié)議創(chuàng)建一個(gè)流協(xié)議處理程序?qū)ο?,?URLStreamHandler 類的實(shí)例:
java.protocol.handler.pkgs
如果該系統(tǒng)屬性的值不為 null,則將其解釋為由垂直斜杠字符“|”分隔的包列表。 構(gòu)造函數(shù)嘗試加載名為:
<package>.<protocol>.Handler
其中 <package> 被包名替換,<protocol> 被協(xié)議名替換。 如果該類不存在,或者該類存在但不是 URLStreamHandler 的子類,則嘗試列表中的下一個(gè)包。
<system default package>.<protocol>.Handler
如果該類不存在,或者該類存在但不是 URLStreamHandler 的子類,則拋出 MalformedURLException。
以下協(xié)議的協(xié)議處理程序保證存在于搜索路徑中:-
http, https, file, and jar
其他協(xié)議的協(xié)議處理程序也可能可用。
此構(gòu)造函數(shù)不執(zhí)行輸入驗(yàn)證。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
protocol | 要使用的協(xié)議的名稱。 |
host | 主機(jī)名。 |
port | 主機(jī)上的端口號(hào)。 |
file | 主機(jī)上的文件 |
Throws:
Throw名稱 | Throw描述 |
---|---|
MalformedURLException | 如果指定了未知協(xié)議。 |
public URL(String protocol, String host, String file) throws MalformedURLException
從指定的協(xié)議名、主機(jī)名和文件名創(chuàng)建 URL。 使用指定協(xié)議的默認(rèn)端口。
該方法等效于調(diào)用四參數(shù)構(gòu)造函數(shù),參數(shù)為協(xié)議、主機(jī)、-1 和文件。 此構(gòu)造函數(shù)不執(zhí)行輸入驗(yàn)證。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
protocol | 要使用的協(xié)議的名稱。 |
host | 主機(jī)名。 |
file | 主機(jī)上的文件。 |
Throws:
Throw名字 | Throw描述 |
---|---|
MalformedURLException | 如果指定了未知協(xié)議。 |
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
從指定的協(xié)議、主機(jī)、端口號(hào)、文件和處理程序創(chuàng)建一個(gè) URL 對(duì)象。 指定端口號(hào) -1 表示 URL 應(yīng)使用協(xié)議的默認(rèn)端口。 指定 null 處理程序表示 URL 應(yīng)使用協(xié)議的默認(rèn)流處理程序,如下所述:java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String )
如果處理程序不為 null 并且存在安全管理器,則使用 NetPermission("specifyStreamHandler") 權(quán)限調(diào)用安全管理器的 checkPermission 方法。 這可能會(huì)導(dǎo)致 SecurityException。 此構(gòu)造函數(shù)不執(zhí)行輸入驗(yàn)證。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
protocol | 要使用的協(xié)議的名稱。 |
host | 主機(jī)名。 |
port | 主機(jī)上的端口號(hào)。 |
file | 主機(jī)上的文件 |
handler | URL 的流處理程序。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
MalformedURLException | 如果指定了未知協(xié)議。 |
SecurityException | 如果存在安全管理器并且其 checkPermission 方法不允許顯式指定流處理程序。 |
public URL(String spec) throws MalformedURLException
從 String 表示創(chuàng)建一個(gè) URL 對(duì)象。
此構(gòu)造函數(shù)等效于使用第一個(gè)參數(shù)為空的雙參數(shù)構(gòu)造函數(shù)的調(diào)用。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
spec | 要解析為 URL 的字符串。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
MalformedURLException | 如果未指定協(xié)議,或發(fā)現(xiàn)未知協(xié)議,或規(guī)范為空。 |
public URL(URL context, String spec) throws MalformedURLException
通過在指定上下文中解析給定規(guī)范來創(chuàng)建 URL。 新 URL 是從給定的上下文 URL 和規(guī)范參數(shù)創(chuàng)建的,如 RFC2396 “統(tǒng)一資源標(biāo)識(shí)符:通用 * 語法”中所述:
<scheme>://<authority><path>?<query>#<fragment>
引用被解析為方案、權(quán)限、路徑、查詢和片段部分。如果路徑組件為空且方案、權(quán)限和查詢組件未定義,則新 URL 是對(duì)當(dāng)前文檔的引用。否則,規(guī)范中存在的片段和查詢部分將在新 URL 中使用。
如果方案組件在給定規(guī)范中定義并且與上下文的方案不匹配,則新 URL 將創(chuàng)建為僅基于規(guī)范的絕對(duì) URL。否則方案組件是從上下文 URL 繼承的。
如果規(guī)范中存在權(quán)限組件,則規(guī)范被視為絕對(duì)規(guī)范,規(guī)范權(quán)限和路徑將替換上下文權(quán)限和路徑。如果規(guī)范中沒有權(quán)限組件,則新 URL 的權(quán)限將從上下文中繼承。
如果規(guī)范的路徑組件以斜杠字符“/”開頭,則路徑被視為絕對(duì)路徑,規(guī)范路徑將替換上下文路徑。
否則,該路徑將被視為相對(duì)路徑并附加到上下文路徑,如 RFC2396 中所述。此外,在這種情況下,通過刪除因出現(xiàn)“..”和“.”而進(jìn)行的目錄更改,路徑被規(guī)范化。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
context | 解析規(guī)范的上下文。 |
spec | 要解析為 URL 的字符串。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
MalformedURLException | 如果未指定協(xié)議,或發(fā)現(xiàn)未知協(xié)議,或規(guī)范為空。 |
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
通過在指定上下文中使用指定處理程序解析給定規(guī)范來創(chuàng)建 URL。 如果處理程序?yàn)榭?,則解析與兩個(gè)參數(shù)構(gòu)造函數(shù)一樣發(fā)生。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
context | 解析規(guī)范的上下文。 |
spec | 要解析為 URL 的字符串。 |
handler | URL 的流處理程序。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
MalformedURLException | 如果未指定協(xié)議,或發(fā)現(xiàn)未知協(xié)議,或規(guī)范為空。 |
SecurityException | 如果存在安全管理器并且其 checkPermission 方法不允許指定流處理程序。 |
public String getQuery()
獲取此 URL 的查詢部分。
返回:
此 URL 的查詢部分,如果不存在則為 null
public String getPath()
獲取此 URL 的路徑部分。
返回:
此 URL 的路徑部分,如果不存在則為空字符串
public String getUserInfo()
獲取此 URL 的 userInfo 部分。
返回:
此 URL 的 userInfo 部分,如果不存在則為 null
public String getAuthority()
獲取此 URL 的權(quán)限部分。
返回:
此 URL 的權(quán)限部分
public int getPort()
獲取此 URL 的端口號(hào)。
返回:
端口號(hào),如果未設(shè)置端口,則為 -1
public int getDefaultPort()
獲取與此 URL 關(guān)聯(lián)的協(xié)議的默認(rèn)端口號(hào)。 如果 URL 方案或 URL 的 URLStreamHandler 未定義默認(rèn)端口號(hào),則返回 -1。
返回:
端口號(hào)
public String getProtocol()
獲取此 URL 的協(xié)議名稱。
返回:
此 URL 的協(xié)議。
public String getHost()
獲取此 URL 的主機(jī)名(如果適用)。 主機(jī)的格式符合 RFC 2732,即對(duì)于文字 IPv6 地址,此方法將返回括在方括號(hào)('[' 和 ']')中的 IPv6 地址。
返回:
此 URL 的主機(jī)名。
public String getFile()
獲取此 URL 的文件名。 返回的文件部分將與 getPath() 相同,加上 getQuery() 值的串聯(lián)(如果有)。 如果沒有查詢部分,此方法和 getPath() 將返回相同的結(jié)果。
返回:
此 URL 的文件名,如果不存在則為空字符串
public String getRef()
獲取此 URL 的錨點(diǎn)(也稱為“引用”)。
返回:
此 URL 的錨點(diǎn)(也稱為“引用”),如果不存在則為 null
public boolean equals(Object obj)
將此 URL 與另一個(gè)對(duì)象進(jìn)行比較是否相等。
如果給定對(duì)象不是 URL,則此方法立即返回 false。
如果兩個(gè) URL 對(duì)象具有相同的協(xié)議、引用等效的主機(jī)、在主機(jī)上具有相同的端口號(hào)以及相同的文件和文件片段,則它們是相等的。
如果兩個(gè)主機(jī)名都可以解析為相同的 IP 地址,則認(rèn)為兩個(gè)主機(jī)是等效的; 否則,如果任一主機(jī)名都無法解析,則主機(jī)名必須相等,不考慮大小寫; 或兩個(gè)主機(jī)名都等于 null。
由于主機(jī)比較需要名稱解析,因此該操作是阻塞操作。
注意:已知為 equals 定義的行為與 HTTP 中的虛擬主機(jī)不一致。
覆蓋:
類 Object 中的等于
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
obj | 要比較的 URL。 |
返回:
如果對(duì)象相同,則為 true; 否則為false。
public int hashCode()
創(chuàng)建一個(gè)適合哈希表索引的整數(shù)。
哈希碼基于與 URL 比較相關(guān)的所有 URL 組件。 因此,該操作是阻塞操作。
覆蓋:
類 Object 中的 hashCode
返回:
此 URL 的哈希碼。
public boolean sameFile(URL other)
比較兩個(gè) URL,不包括片段組件。
如果此 URL 和其他參數(shù)相等而不考慮片段組件,則返回 true。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
other | 要比較的 URL。 |
返回:
如果它們引用相同的遠(yuǎn)程對(duì)象,則為 true; 否則為false。
public String toString()
構(gòu)造此 URL 的字符串表示形式。 該字符串是通過為此對(duì)象調(diào)用流協(xié)議處理程序的 toExternalForm 方法創(chuàng)建的。
覆蓋:
類 Object 中的 toString
返回:
此對(duì)象的字符串表示形式。
public String toExternalForm()
構(gòu)造此 URL 的字符串表示形式。 該字符串是通過為此對(duì)象調(diào)用流協(xié)議處理程序的 toExternalForm 方法創(chuàng)建的。
返回:
此對(duì)象的字符串表示形式。
public URI toURI() throws URISyntaxException
返回與此 URL 等效的 URI。 此方法的功能與 new URI (this.toString()) 相同。
請(qǐng)注意,任何符合 RFC 2396 的 URL 實(shí)例都可以轉(zhuǎn)換為 URI。 但是,一些不嚴(yán)格遵守的 URL 不能轉(zhuǎn)換為 URI。
返回:
與此 URL 等效的 URI 實(shí)例。
Throws:
Throw名稱 | Throw描述 |
---|---|
URISyntaxException | 如果此 URL 未嚴(yán)格按照 RFC2396 格式化并且無法轉(zhuǎn)換為 URI。 |
public URLConnection openConnection() throws IOException
返回一個(gè) URLConnection 實(shí)例,該實(shí)例表示與 URL 引用的遠(yuǎn)程對(duì)象的連接。
每次調(diào)用此 URL 的協(xié)議處理程序的 URLStreamHandler.openConnection(URL) 方法時(shí),都會(huì)創(chuàng)建一個(gè)新的 URLConnection 實(shí)例。
應(yīng)該注意的是,URLConnection 實(shí)例在創(chuàng)建時(shí)不會(huì)建立實(shí)際的網(wǎng)絡(luò)連接。 這只會(huì)在調(diào)用 URLConnection.connect() 時(shí)發(fā)生。
如果對(duì)于 URL 的協(xié)議(例如 HTTP 或 JAR),存在屬于以下包之一或其子包之一的公共專用 URLConnection 子類:java.lang、java.io、java.util、java.net、 返回的連接將屬于該子類。 例如,對(duì)于 HTTP,將返回一個(gè) HttpURLConnection,對(duì)于 JAR,將返回一個(gè) JarURLConnection。
返回:
鏈接到 URL 的 URLConnection。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常。 |
public URLConnection openConnection(Proxy proxy) throws IOException
與 openConnection() 相同,只是連接將通過指定的代理進(jìn)行; 不支持代理的協(xié)議處理程序?qū)⒑雎源韰?shù)并建立正常連接。 調(diào)用此方法會(huì)搶占系統(tǒng)的默認(rèn) ProxySelector 設(shè)置。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
proxy | 建立此連接的代理。 如果需要直接連接,則應(yīng)指定 Proxy.NO_PROXY。 |
返回:
到 URL 的 URLConnection。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常。 |
SecurityException | 如果存在安全管理器并且調(diào)用者無權(quán)連接到代理。 |
IllegalArgumentException | 如果 proxy 為 null,或者 proxy 的類型錯(cuò)誤,將被拋出 |
UnsupportedOperationException | 如果實(shí)現(xiàn)協(xié)議處理程序的子類不支持此方法。 |
public InputStream openStream() throws IOException
打開到此 URL 的連接并返回一個(gè) InputStream 以從該連接中讀取。 此方法是以下的簡(jiǎn)寫:
openConnection().getInputStream()
返回:
用于從 URL 連接讀取的輸入流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常。 |
public Object getContent() throws IOException
獲取此 URL 的內(nèi)容。 此方法是以下的簡(jiǎn)寫:
openConnection().getContent()
返回:
此 URL 的內(nèi)容。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常。 |
public Object getContent(Class[] classes) throws IOException
獲取此 URL 的內(nèi)容。 此方法是以下的簡(jiǎn)寫:
openConnection().getContent(Class[])
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
classes | Java 類型的數(shù)組 |
返回:
此 URL 的內(nèi)容對(duì)象,它是 classes 數(shù)組中指定的類型的第一個(gè)匹配項(xiàng)。 如果不支持任何請(qǐng)求的類型,則為 null。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 異常。 |
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
設(shè)置應(yīng)用程序的 URLStreamHandlerFactory。 此方法在給定的 Java 虛擬機(jī)中最多可以調(diào)用一次。
URLStreamHandlerFactory 實(shí)例用于從協(xié)議名稱構(gòu)造流協(xié)議處理程序。
如果有安全管理器,該方法首先調(diào)用安全管理器的 checkSetFactory 方法,確保操作被允許。 這可能會(huì)導(dǎo)致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
fac | 想要的工廠 |
Throws:
Throw名稱 | Throw描述 |
---|---|
Error | 如果應(yīng)用程序已經(jīng)設(shè)置了工廠。 |
SecurityException | 如果存在安全管理器并且其 checkSetFactory 方法不允許該操作。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: