public final class URL
extends Object
implements Serializable
java.lang.Object | |
↳ | java.net.URL |
类URL
表示统一资源定位符,指向万维网上“资源”的指针。 资源可以像文件或目录一样简单,也可以是对更复杂对象的引用,例如对数据库或搜索引擎的查询。 有关URL及其格式类型的更多信息,请访问:
http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html
通常,URL可以分成几个部分。 前面的URL示例指出要使用的协议是http
(超文本传输协议),并且该信息驻留在名为www.socs.uts.edu.au
的主机上。 该主机上的信息被命名为/MosaicDocs-old/url-primer.html
。 主机上这个名字的确切含义既取决于协议,也取决于主机。 这些信息通常驻留在一个文件中,但它可以即时生成。 URL的这个组件称为路径组件。
URL可以选择指定一个“端口”,它是在远程主机上建立TCP连接的端口号。 如果未指定端口,则会使用协议的默认端口。 例如, http
的默认端口是80
。 另一个端口可以被指定为:
http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
的语法URL
由下式定义RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax ,通过修正RFC 2732: Format for Literal IPv6 Addresses in URLs 。 Literal IPv6地址格式还支持scope_ids。 scope_ids的语法和用法见here 。
一个URL可能会附加一个“片段”,也称为“ref”或“reference”。 该片段由尖号“#”后面加上更多字符表示。 例如,
http://java.sun.com/index.html#chapter1
这个片段在技术上并不是URL的一部分。 相反,它表明在检索到指定的资源之后,应用程序特别感兴趣的是附有标签chapter1
那部分文档。 标签的含义是特定于资源的。
应用程序还可以指定一个“相对URL”,它只包含足够的信息来访问相对于另一个URL的资源。 HTML页面中经常使用相对URL。 例如,如果URL的内容为:
contained within it the relative URL:http://java.sun.com/index.html
it would be a shorthand for:FAQ.html
http://java.sun.com/FAQ.html
相对URL不需要指定URL的所有组件。 如果协议,主机名或端口号缺失,则该值将从完全指定的URL继承。 文件组件必须指定。 可选片段不会被继承。
根据RFC2396中定义的转义机制,URL类本身不编码或解码任何URL组件。 调用者有责任对任何字段进行编码,这些字段在调用URL之前需要被转义,并且还要解码从URL返回的任何转义字段。 此外,因为URL不知道URL转义,所以它不能识别相同URL的编码或解码形式之间的等同性。 例如,这两个网址:
http://foo.com/hello world/ and http://foo.com/hello%20worldwould be considered not equal to each other.
请注意,在某些情况下, URI
类会执行转义其组件字段的操作。 管理URL编码和解码的推荐方法是使用URI
,并使用toURI()
和toURL()
在这两个类之间进行转换。
也可以使用 URLEncoder
和 URLDecoder
类,但仅用于HTML表单编码,这与RFC2396中定义的编码方案不同。
Public constructors |
|
---|---|
URL(String protocol, String host, int port, String file) 创建 |
|
URL(String protocol, String host, String file) 根据指定的 |
|
URL(String protocol, String host, int port, String file, URLStreamHandler handler) 创建 |
|
URL(String spec) 从 |
|
URL(URL context, String spec) 通过在指定的上下文中解析给定的规范来创建URL。 |
|
URL(URL context, String spec, URLStreamHandler handler) 通过在指定的上下文中使用指定的处理程序解析给定的规范来创建URL。 |
Public methods |
|
---|---|
boolean |
equals(Object obj) 将这个URL与另一个对象进行比较。 |
String |
getAuthority() 获取此 |
final Object |
getContent() 获取此URL的内容。 |
final Object |
getContent(Class[] classes) 获取此URL的内容。 |
int |
getDefaultPort() 获取与此 |
String |
getFile() 获取这个 |
String |
getHost() 获取此 |
String |
getPath() 获取此 |
int |
getPort() 获取此 |
String |
getProtocol() 获取此 |
String |
getQuery() 获取此 |
String |
getRef() 获取此 |
String |
getUserInfo() 获取此 |
int |
hashCode() 创建一个适合散列表索引的整数。 |
URLConnection |
openConnection(Proxy proxy) 与 |
URLConnection |
openConnection() 返回一个 |
final InputStream |
openStream() 打开与此 |
boolean |
sameFile(URL other) 比较两个网址,不包括片段组件。 |
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac) 设置应用程序的 |
String |
toExternalForm() 构造此 |
String |
toString() 构造这个 |
URI |
toURI() 返回等同于此URL的 |
Protected methods |
|
---|---|
void |
set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) 设置URL的指定8个字段。 |
void |
set(String protocol, String host, int port, String file, String ref) 设置URL的字段。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
URL (String protocol, String host, int port, String file)
创建 URL
从指定对象 protocol
, host
, port
号码,和 file
。
host
可以表示为主机名或文字IP地址。 如果使用IPv6文字地址,则应将其用方括号( '['和']' )括起来,如RFC 2732所指定; 但是,也接受RFC 2373: IP Version 6 Addressing Architecture中定义的文字IPv6地址格式。
指定 port
数字 -1
表示URL应该使用协议的默认端口。
如果这是使用指定协议创建的第一个URL对象,则为该协议创建一个 流协议处理程序对象,即类 URLStreamHandler
一个实例:
URLStreamHandlerFactory
as the stream handler factory, then the createURLStreamHandler
method of that instance is called with the protocol string as an argument to create the stream protocol handler. URLStreamHandlerFactory
has yet been set up, or if the factory's createURLStreamHandler
method returns null
, then the constructor finds the value of the system property:
If the value of that system property is notjava.protocol.handler.pkgs
null
, it is interpreted as a list of packages separated by a vertical slash character '|
'. The constructor tries to load the class named:
where <package> is replaced by the name of the package and <protocol> is replaced by the name of the protocol. If this class does not exist, or if the class exists but it is not a subclass of<package>.<protocol>.Handler
URLStreamHandler
, then the next package in the list is tried. If this class does not exist, or if the class exists but it is not a subclass of<system default package>.<protocol>.Handler
URLStreamHandler
, then a MalformedURLException
is thrown. 以下协议的协议处理程序保证存在于搜索路径中: -
Protocol handlers for additional protocols may also be available.http, https, ftp, file, and jar
这个构造函数不会验证输入。
Parameters | |
---|---|
protocol |
String : the name of the protocol to use. |
host |
String : the name of the host. |
port |
int : the port number on the host. |
file |
String : the file on the host |
Throws | |
---|---|
MalformedURLException |
if an unknown protocol is specified. |
URL (String protocol, String host, String file)
根据指定的protocol
名称, host
名称和file
名称创建一个URL。 使用指定协议的默认端口。
此方法等效于调用带参数是四个参数的构造函数protocol
, host
, -1
,并file
。 这个构造函数不会验证输入。
Parameters | |
---|---|
protocol |
String : the name of the protocol to use. |
host |
String : the name of the host. |
file |
String : the file on the host. |
Throws | |
---|---|
MalformedURLException |
if an unknown protocol is specified. |
URL (String protocol, String host, int port, String file, URLStreamHandler handler)
创建URL
从指定对象protocol
, host
, port
号码, file
,和handler
。 指定一个port
数字-1
表示URL应该使用协议的默认端口。 指定handler
的null
表示该URL应该使用该协议的默认流处理程序,如下所示:java.net.URL#URL(java.lang.String,java.lang.String,int,java.lang.String )
如果处理程序不为空并且存在安全管理器,则安全管理器的checkPermission
方法NetPermission("specifyStreamHandler")
权限被调用。 这可能会导致SecurityException。 这个构造函数不会验证输入。
Parameters | |
---|---|
protocol |
String : the name of the protocol to use. |
host |
String : the name of the host. |
port |
int : the port number on the host. |
file |
String : the file on the host |
handler |
URLStreamHandler : the stream handler for the URL. |
Throws | |
---|---|
MalformedURLException |
if an unknown protocol is specified. |
SecurityException |
if a security manager exists and its checkPermission method doesn't allow specifying a stream handler explicitly. |
URL (String spec)
从 String
表示中创建一个 URL
对象。
这个构造函数相当于使用 null
第一个参数调用双参数构造函数。
Parameters | |
---|---|
spec |
String : the String to parse as a URL. |
Throws | |
---|---|
MalformedURLException |
if no protocol is specified, or an unknown protocol is found, or spec is null. |
URL (URL context, String spec)
通过在指定的上下文中解析给定的规范来创建URL。 新的URL是根据RFC2396“统一资源标识符:通用*语法”中描述的给定上下文URL和spec参数创建的:
The reference is parsed into the scheme, authority, path, query and fragment parts. If the path component is empty and the scheme, authority, and query components are undefined, then the new URL is a reference to the current document. Otherwise, the fragment and query parts present in the spec are used in the new URL.<scheme>://<authority><path>?<query>#<fragment>
如果方案组件是在给定的规范中定义的,并且与上下文的方案不匹配,则新URL将根据规范单独创建为绝对URL。 否则,方案组件将从上下文URL继承。
如果规范组件存在于规范中,则规范将被视为绝对规范,规范权限和路径将取代上下文权限和路径。 如果规范中缺少权威组件,那么新URL的权限将从上下文继承。
如果规范的路径组件以斜杠字符“/”开头,那么该路径将被视为绝对路径,并且规范路径会替换上下文路径。
否则,路径被视为相对路径并被附加到上下文路径,如RFC2396中所述。 此外,在这种情况下,通过删除由“..”和“。”出现的目录更改来对该路径进行规范化。
有关URL解析的更详细说明,请参阅RFC2396。
Parameters | |
---|---|
context |
URL : the context in which to parse the specification. |
spec |
String : the String to parse as a URL. |
Throws | |
---|---|
MalformedURLException |
if no protocol is specified, or an unknown protocol is found, or spec is null. |
URL (URL context, String spec, URLStreamHandler handler)
通过在指定的上下文中使用指定的处理程序解析给定的规范来创建URL。 如果处理程序为空,则解析与两个参数构造函数一样。
Parameters | |
---|---|
context |
URL : the context in which to parse the specification. |
spec |
String : the String to parse as a URL. |
handler |
URLStreamHandler : the stream handler for the URL. |
Throws | |
---|---|
MalformedURLException |
if no protocol is specified, or an unknown protocol is found, or spec is null. |
SecurityException |
if a security manager exists and its checkPermission method doesn't allow specifying a stream handler. |
boolean equals (Object obj)
将这个URL与另一个对象进行比较。
如果给定的对象不是URL,则此方法立即返回 false
。
如果两个URL对象具有相同的协议,参考等效主机,在主机上具有相同的端口号以及文件的相同文件和片段,则两个URL对象相等。
如果此URL等于o
则返回true。 如果URL具有相同的协议,主机,端口,文件和引用,则它们是相等的。
URL.equals()的一些实现通过网络解析主机名。 这是有问题的:
Map
and Set
expect that equals
and hashCode
will return quickly. By violating this assumption, this method posed potential performance problems. Android 4.0(冰淇淋三明治)解决了这个问题。 在该版本中,只有主机名相同(忽略大小写),URL才是相等的。
Parameters | |
---|---|
obj |
Object : the URL to compare against. |
Returns | |
---|---|
boolean |
true if the objects are the same; false otherwise. |
String getAuthority ()
获取此 URL
的权威部分。
Returns | |
---|---|
String |
the authority part of this URL |
Object getContent ()
获取此URL的内容。 这种方法是一个简写:
openConnection().getContent()
Returns | |
---|---|
Object |
the contents of this URL. |
Throws | |
---|---|
IOException |
if an I/O exception occurs. |
也可以看看:
Object getContent (Class[] classes)
获取此URL的内容。 这种方法是一个简写:
openConnection().getContent(Class[])
Parameters | |
---|---|
classes |
Class : an array of Java types |
Returns | |
---|---|
Object |
the content object of this URL that is the first match of the types specified in the classes array. null if none of the requested types are supported. |
Throws | |
---|---|
IOException |
if an I/O exception occurs. |
也可以看看:
int getDefaultPort ()
获取与此URL
关联的协议的默认端口号。 如果URL方案或URL的URLStreamHandler未定义默认端口号,则返回-1。
Returns | |
---|---|
int |
the port number |
String getFile ()
获取这个URL
的文件名。 返回的文件部分将与getPath()
相同,再加上getQuery()
的值(如果有的话)的连接。 如果没有查询部分,则此方法和getPath()
将返回相同的结果。
Returns | |
---|---|
String |
the file name of this URL , or an empty string if one does not exist |
String getHost ()
获取此URL
的主机名(如果适用)。 主机的格式符合RFC 2732,即对于文字IPv6地址,此方法将返回方括号( '['和']' )中的IPv6地址。
Returns | |
---|---|
String |
the host name of this URL . |
String getPath ()
获取此 URL
的路径部分。
Returns | |
---|---|
String |
the path part of this URL , or an empty string if one does not exist |
int getPort ()
获取此 URL
的端口号。
Returns | |
---|---|
int |
the port number, or -1 if the port is not set |
String getProtocol ()
获取此 URL
的协议名称。
Returns | |
---|---|
String |
the protocol of this URL . |
String getQuery ()
获取此 URL
的查询部分。
Returns | |
---|---|
String |
the query part of this URL , or null if one does not exist |
String getRef ()
获取此 URL
的锚点(也称为“参考”)。
Returns | |
---|---|
String |
the anchor (also known as the "reference") of this URL , or null if one does not exist |
String getUserInfo ()
获取此 URL
的userInfo部分。
Returns | |
---|---|
String |
the userInfo part of this URL , or null if one does not exist |
int hashCode ()
创建一个适合散列表索引的整数。
哈希码基于与URL比较相关的所有URL组件。 因此,该操作是阻止操作。
Returns | |
---|---|
int |
a hash code for this URL . |
URLConnection openConnection (Proxy proxy)
与openConnection()
相同,但连接将通过指定的代理进行; 不支持代理的协议处理程序将忽略代理参数并建立正常连接。 调用此方法将抢占系统的默认ProxySelector设置。
Parameters | |
---|---|
proxy |
Proxy : the Proxy through which this connection will be made. If direct connection is desired, Proxy.NO_PROXY should be specified. |
Returns | |
---|---|
URLConnection |
a URLConnection to the URL. |
Throws | |
---|---|
IOException |
if an I/O exception occurs. |
SecurityException |
if a security manager is present and the caller doesn't have permission to connect to the proxy. |
IllegalArgumentException |
will be thrown if proxy is null, or proxy has the wrong type |
UnsupportedOperationException |
if the subclass that implements the protocol handler doesn't support this method. |
URLConnection openConnection ()
返回一个 URLConnection
实例表示由所引用的远程对象的连接 URL
。
每次调用此URL的协议处理程序的 URLStreamHandler.openConnection(URL)方法时, 都会创建一个新的 URLConnection实例。
应该注意的是,URLConnection实例在创建时不会建立实际的网络连接。 这只会在拨打URLConnection.connect()时才会发生。
如果对于URL的协议(例如HTTP或JAR),则存在属于以下包之一或其子包之一的公共专用URLConnection子类:java.lang,java.io,java.util,java.net,返回的连接将是该子类的连接。 例如,对于HTTP,将返回HttpURLConnection,对于JAR,将返回JarURLConnection。
Returns | |
---|---|
URLConnection |
a URLConnection linking to the URL. |
Throws | |
---|---|
IOException |
if an I/O exception occurs. |
InputStream openStream ()
打开与此URL
的连接并返回InputStream
以从该连接读取。 这种方法是一个简写:
openConnection().getInputStream()
Returns | |
---|---|
InputStream |
an input stream for reading from the URL connection. |
Throws | |
---|---|
IOException |
if an I/O exception occurs. |
也可以看看:
boolean sameFile (URL other)
比较两个网址,不包括片段组件。
如果这个 URL
和 other
参数相等,而没有考虑片段组件,则返回 true
。
Parameters | |
---|---|
other |
URL : the URL to compare against. |
Returns | |
---|---|
boolean |
true if they reference the same remote object; false otherwise. |
void setURLStreamHandlerFactory (URLStreamHandlerFactory fac)
设置应用程序的URLStreamHandlerFactory
。 该方法在给定的Java虚拟机中最多可以调用一次。
URLStreamHandlerFactory
实例用于从协议名称构造流协议处理程序。
如果存在安全管理器,则此方法首先调用安全管理器的方法checkSetFactory
以确保允许操作。 这可能会导致SecurityException。
Parameters | |
---|---|
fac |
URLStreamHandlerFactory : the desired factory. |
Throws | |
---|---|
Error |
if the application has already set a factory. |
SecurityException |
if a security manager exists and its checkSetFactory method doesn't allow the operation. |
String toExternalForm ()
构造此URL
的字符串表示URL
。 该字符串通过调用此对象的流协议处理程序的toExternalForm
方法来创建。
Returns | |
---|---|
String |
a string representation of this object. |
String toString ()
构造此URL
的字符串表示URL
。 该字符串通过调用此对象的流协议处理程序的toExternalForm
方法来创建。
Returns | |
---|---|
String |
a string representation of this object. |
URI toURI ()
返回等同于此URL的URI
。 该方法的功能与new URI (this.toString())
相同。
请注意,符合RFC 2396的任何URL实例都可以转换为URI。 但是,一些不严格遵守的URL不能转换为URI。
Returns | |
---|---|
URI |
a URI instance equivalent to this URL. |
Throws | |
---|---|
URISyntaxException |
if this URL is not formatted strictly according to to RFC2396 and cannot be converted to a URI. |
void set (String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
设置URL的指定8个字段。 这不是一个公共方法,因此只有URLStreamHandlers可以修改URL字段。 URL是不变的。
Parameters | |
---|---|
protocol |
String : the name of the protocol to use |
host |
String : the name of the host |
port |
int : the port number on the host |
authority |
String : the authority part for the url |
userInfo |
String : the username and password |
path |
String : the file on the host |
query |
String : the query part of this URL |
ref |
String : the internal reference in the URL |
void set (String protocol, String host, int port, String file, String ref)
设置URL的字段。 这不是一个公共方法,因此只有URLStreamHandlers可以修改URL字段。 URL是不变的。
Parameters | |
---|---|
protocol |
String : the name of the protocol to use |
host |
String : the name of the host |
port |
int : the port number on the host |
file |
String : the file on the host |
ref |
String : the internal reference in the URL |