- java.lang.Object
-
- java.net.URL
-
- 实现的所有接口
-
Serializable
public final class URLextends Objectimplements Serializable
类URL
表示统一资源定位符,指向万维网上的“资源”的指针。 资源可以是文件或目录这样简单的东西,也可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询。 有关URL类型及其格式的更多信息,请访问: Types of URL通常,URL可以分为几个部分。 请考虑以下示例:
http://www.example.com/docs/resource1.html
上面的URL表示要使用的协议是
http
(超文本传输协议),并且该信息驻留在名为www.example.com
的主机上。 该主机上的信息名为/docs/resource1.html
。 主机上此名称的确切含义是依赖于协议和依赖于主机。 信息通常驻留在文件中,但可以在运行中生成。 URL的此组件称为路径组件。URL可以选择指定“端口”,该端口是在远程主机上进行TCP连接的端口号。 如果未指定端口,则使用协议的默认端口。 例如,
http
的默认端口为80
。 备用端口可以指定为:http://www.example.com:1080/docs/resource1.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到达资源的信息。 相对URL经常在HTML页面中使用。 例如,如果URL的内容:
http://java.sun.com/index.html
FAQ.html
http://java.sun.com/FAQ.html
相对URL无需指定URL的所有组件。 如果缺少协议,主机名或端口号,则该值将从完全指定的URL继承。 必须指定文件组件。 可选片段不会被继承。
URL类本身不会根据RFC2396中定义的转义机制对任何URL组件进行编码或解码。 调用者负责编码在调用URL之前需要转义的任何字段,以及解码从URL返回的任何转义字段。 此外,由于URL不了解URL转义,因此它无法识别同一URL的编码或解码形式之间的等效性。 例如,两个网址:
http://foo.com/hello world/ and http://foo.com/hello%20world
被认为不相等。注意,
URI
类确实在某些情况下执行其组件字段的转义。 管理URL编码和解码的推荐方法是使用URI
,并使用toURI()
和URI.toURL()
在这两个类之间进行转换。也可以使用
URLEncoder
和URLDecoder
类,但仅用于HTML表单编码,这与RFC2396中定义的编码方案不同。- 从以下版本开始:
- 1.0
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 URL(String spec)
从String
表示创建URL
对象。URL(String protocol, String host, int port, String file)
创建URL
从指定对象protocol
,host
,port
号和file
。URL(String protocol, String host, int port, String file, URLStreamHandler handler)
创建URL
从指定对象protocol
,host
,port
数,file
,和handler
。URL(String protocol, String host, String file)
根据指定的protocol
名称,host
名称和file
名称创建URL。URL(URL context, String spec)
通过解析指定上下文中的给定规范来创建URL。URL(URL context, String spec, URLStreamHandler handler)
通过使用指定上下文中的指定处理程序解析给定规范来创建URL。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
equals(Object obj)
将此URL与另一个对象进行相等性比较。String
getAuthority()
获取此URL
的权限部分。Object
getContent()
获取此URL的内容。Object
getContent(类<?>[] classes)
获取此URL的内容。int
getDefaultPort()
获取与此URL
关联的协议的默认端口号。String
getFile()
获取此URL
的文件名。String
getHost()
获取此URL
的主机名(如果适用)。String
getPath()
获取此URL
的路径部分。int
getPort()
获取此URL
的端口号。String
getProtocol()
获取此URL
的协议名称。String
getQuery()
获取此URL
的查询部分。String
getRef()
获取此URL
的锚点(也称为“引用”)。String
getUserInfo()
获取此URL
的userInfo部分。int
hashCode()
创建适合哈希表索引的整数。URLConnection
openConnection()
返回一个URLConnection
实例表示由所引用的远程对象的连接URL
。URLConnection
openConnection(Proxy proxy)
与openConnection()
相同,但连接将通过指定的代理进行; 不支持代理的协议处理程序将忽略代理参数并进行正常连接。InputStream
openStream()
打开与此URL
的连接并返回InputStream
以从该连接读取。boolean
sameFile(URL other)
比较两个URL,不包括片段组件。static void
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
设置应用程序的URLStreamHandlerFactory
。String
toExternalForm()
构造此URL
的字符串表示URL
。String
toString()
构造此URL
的字符串表示URL
。URI
toURI()
返回与此URL等效的URI
。
-
-
-
构造方法详细信息
-
URL
public URL(String protocol, String host, int port, String file) throws MalformedURLException
创建URL
从指定对象protocol
,host
,port
号和file
。host
可以表示为主机名或文字IP地址。 如果使用IPv6文字地址,则应将其括在方括号('['
和']'
)中,如RFC 2732所述 ; 但是,也接受RFC 2373: IP Version 6 Addressing Architecture中定义的文字IPv6地址格式。指定
port
数字-1
表示URL应使用协议的默认端口。如果这是使用指定协议创建的第一个URL对象,则会为该协议创建流协议处理程序对象(类
URLStreamHandler
的实例):- 如果应用程序先前
URLStreamHandlerFactory
的实例设置为流处理程序工厂,则使用协议字符串作为参数调用该实例的createURLStreamHandler
方法以创建流协议处理程序。 - 如果尚未设置
URLStreamHandlerFactory
,或者工厂的createURLStreamHandler
方法返回null
,则ServiceLoader机制用于使用系统类加载器查找URLStreamHandlerProvider实现。 提供程序所在的顺序是特定于实现的,并且实现可以自由地缓存所定位的提供程序。 一个ServiceConfigurationError ,Error
或RuntimeException
从抛出createURLStreamHandler
,如果遇到,将传播到调用线程。 如果实例化,则使用协议字符串调用每个提供程序的createURLStreamHandler
方法,直到提供程序返回非null,或者所有提供程序已用尽。 - 如果上一步未能找到协议处理程序,则构造函数将读取系统属性的值:
java.protocol.handler.pkgs
null
,则将其解释为由垂直斜杠字符“|
”分隔的包列表。 构造函数尝试加载名为的类:<package>.<protocol>.Handler
<package>
被包名称替换,<protocol>
被协议名称替换。 如果此类不存在,或者该类存在但它不是URLStreamHandler
的子类,则尝试列表中的下一个包。 - 如果上一步未能找到协议处理程序,则构造函数会尝试加载内置协议处理程序。 如果此类不存在,或者该类存在但它不是
URLStreamHandler
的子类,则抛出MalformedURLException
。
保证在搜索路径上存在以下协议的协议处理程序: -
http, https, file, and jar
此构造函数不执行输入验证。
- 参数
-
protocol
- 要使用的协议的名称。 -
host
- 主机的名称。 -
port
- 主机上的端口号。 -
file
- 主机上的文件 - 异常
-
MalformedURLException
- 如果未知协议或端口是-1以外的负数 - 另请参见:
-
System.getProperty(java.lang.String)
,setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
,URLStreamHandler
,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
- 如果应用程序先前
-
URL
public URL(String protocol, String host, String file) throws MalformedURLException
根据指定的protocol
名称,host
名称和file
名称创建URL。 使用指定协议的默认端口。此构造函数等效于四参数构造函数,唯一不同的是使用指定协议的默认端口。 此构造函数不执行输入验证。
- 参数
-
protocol
- 要使用的协议的名称。 -
host
- 主机的名称。 -
file
- 主机上的文件。 - 异常
-
MalformedURLException
- 如果指定了未知协议。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
-
URL
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
创建URL
从指定对象protocol
,host
,port
数,file
,和handler
。 指定port
数字-1
表示URL应使用协议的默认端口。 指定handler
的null
表示URL应使用协议的默认流处理程序,如下所述:java.net.URLnull
(java.lang.String,java.lang.String,int,java.lang.String )如果处理程序不为null并且存在安全管理器,则使用
NetPermission("specifyStreamHandler")
权限调用安全管理器的checkPermission
方法。 这可能会导致SecurityException。 此构造函数不执行输入验证。- 参数
-
protocol
- 要使用的协议的名称。 -
host
- 主机的名称。 -
port
- 主机上的端口号。 -
file
- 主机上的文件 -
handler
- URL的流处理程序。 - 异常
-
MalformedURLException
- 如果未知协议或端口是-1以外的负数 -
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许显式指定流处理程序。 - 另请参见:
-
System.getProperty(java.lang.String)
,setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
,URLStreamHandler
,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
,SecurityManager.checkPermission(java.security.Permission)
,NetPermission
-
URL
public URL(String spec) throws MalformedURLException
从String
表示创建URL
对象。此构造函数等效于使用
null
第一个参数调用双参数构造函数。- 参数
-
spec
- 要解析为URL的String
。 - 异常
-
MalformedURLException
- 如果未指定协议,或找到未知协议,或spec
为null
,或者已解析的URL无法遵循相关协议的特定语法。 - 另请参见:
-
URL(java.net.URL, java.lang.String)
-
URL
public URL(URL context, String spec) throws MalformedURLException
通过解析指定上下文中的给定规范来创建URL。 新URL是根据给定的上下文URL和spec参数创建的,如RFC2396“统一资源标识符:通用*语法”中所述:<scheme>://<authority><path>?<query>#<fragment>
如果方案组件是在给定规范中定义的,并且与上下文的方案不匹配,则新URL将仅基于规范创建为绝对URL。 否则,方案组件将继承自上下文URL。
如果规范中存在权限组件,那么规范将被视为绝对,规范权限和路径将替换上下文权限和路径。 如果规范中缺少权限组件,则新URL的权限将从上下文继承。
如果规范的路径组件以斜杠字符“/”开头,则路径将被视为绝对路径,规范路径将替换上下文路径。
否则,路径将被视为相对路径,并附加到上下文路径,如RFC2396中所述。 此外,在这种情况下,通过删除由“..”和“。”的出现所做的目录更改来规范化路径。
有关URL解析的更详细说明,请参阅RFC2396。
- 参数
-
context
- 解析规范的上下文。 -
spec
- 要解析为URL的String
。 - 异常
-
MalformedURLException
- 如果未指定协议,或spec
未知协议,或者spec
为null
,或者已解析的URL无法遵循相关协议的特定语法。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler
,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
-
URL
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
通过使用指定上下文中的指定处理程序解析给定规范来创建URL。 如果处理程序为null,则解析与两个参数构造函数一样发生。- 参数
-
context
- 解析规范的上下文。 -
spec
- 要解析为URL的String
。 -
handler
- URL的流处理程序。 - 异常
-
MalformedURLException
- 如果未指定协议,或找到未知协议,或spec
为null
,或者解析的URL无法遵循相关协议的特定语法。 -
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许指定流处理程序。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler
,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
-
-
方法详细信息
-
getQuery
public String getQuery()
获取此URL
的查询部分。- 结果
- 此
URL
或null
的查询部分(如果不存在) - 从以下版本开始:
- 1.3
-
getPath
public String getPath()
获取此URL
的路径部分。- 结果
-
URL
的路径部分,如果不存在,则为空字符串 - 从以下版本开始:
- 1.3
-
getUserInfo
public String getUserInfo()
获取此URL
的userInfo部分。- 结果
-
URL
的userInfo部分,如果不存在,null
- 从以下版本开始:
- 1.3
-
getAuthority
public String getAuthority()
获取此URL
的权限部分。- 结果
- 这个
URL
的权威部分 - 从以下版本开始:
- 1.3
-
getPort
public int getPort()
获取此URL
的端口号。- 结果
- 端口号,如果未设置端口,则返回-1
-
getDefaultPort
public int getDefaultPort()
获取与此URL
关联的协议的默认端口号。 如果URL方案或URL的URLStreamHandler未定义默认端口号,则返回-1。- 结果
- 端口号
- 从以下版本开始:
- 1.4
-
getProtocol
public String getProtocol()
获取此URL
的协议名称。- 结果
- 该协议的
URL
。
-
getHost
public String getHost()
获取此URL
的主机名(如果适用)。 主机的格式符合RFC 2732,即对于文字IPv6地址,此方法将返回括在方括号中的IPv6地址('['
和']'
)。- 结果
- 这个
URL
的主机名。
-
getFile
public String getFile()
获取此URL
的文件名。 返回的文件部分将与getPath()
相同,加上getPath()
的值的getQuery()
(如果有)。 如果没有查询部分,则此方法和getPath()
将返回相同的结果。- 结果
-
URL
的文件名,如果不存在,则为空字符串
-
getRef
public String getRef()
获取此URL
的锚点(也称为“引用”)。- 结果
-
URL
的锚(也称为“参考”),如果不存在,null
-
equals
public boolean equals(Object obj)
将此URL与另一个对象进行相等性比较。如果给定对象不是URL,则此方法立即返回
false
。如果两个URL对象具有相同的协议,引用等效主机,主机上具有相同的端口号,以及文件的相同文件和片段,则它们是相等的。
如果两个主机名都可以解析为相同的IP地址,则认为两个主机是等效的。 否则,如果无法解析任何一个主机名,则主机名必须相等而不考虑大小写; 或两个主机名都等于null。
由于主机比较需要名称解析,因此此操作是阻止操作。
注意:已知
equals
已定义行为与HTTP中的虚拟主机不一致。- 重写:
-
equals
类Object
- 参数
-
obj
- 要比较的URL。 - 结果
-
true
如果对象相同; 否则为false
。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
创建适合哈希表索引的整数。哈希码基于与URL比较相关的所有URL组件。 因此,该操作是阻塞操作。
- 重写:
-
hashCode
类Object
- 结果
- 这个
URL
的哈希代码。 - 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
sameFile
public boolean sameFile(URL other)
比较两个URL,不包括片段组件。如果此
URL
和other
参数相等而不考虑片段组件,则返回true
。- 参数
-
other
- 比较URL
。 - 结果
-
true
如果它们引用同一个远程对象; 否则为false
。
-
toString
public String toString()
构造此URL
的字符串表示URL
。 通过调用此对象的流协议处理程序的toExternalForm
方法来创建该字符串。- 重写:
-
toString
类Object
- 结果
- 此对象的字符串表示形式。
- 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler.toExternalForm(java.net.URL)
-
toExternalForm
public String toExternalForm()
构造此URL
的字符串表示URL
。 通过调用此对象的流协议处理程序的toExternalForm
方法来创建该字符串。
-
toURI
public URI toURI() throws URISyntaxException
返回与此URL等效的URI
。 此方法的功能与new URI (this.toString())
相同。请注意,任何符合RFC 2396的URL实例都可以转换为URI。 但是,某些严格遵守的URL无法转换为URI。
- 结果
- 与此URL等效的URI实例。
- 异常
-
URISyntaxException
- 如果此URL未严格按照RFC2396格式化,并且无法转换为URI。 - 从以下版本开始:
- 1.5
-
openConnection
public URLConnection openConnection() throws IOException
返回一个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。
- 结果
- a
URLConnection
链接到URL。 - 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
-
openConnection
public URLConnection openConnection(Proxy proxy) throws IOException
- 参数
-
proxy
- 用于建立此连接的代理服务器。 如果需要直接连接,则应指定Proxy.NO_PROXY。 - 结果
- 一个
URLConnection
到URL。 - 异常
-
IOException
- 如果发生I / O异常。 -
SecurityException
- 如果存在安全管理器且调用者没有连接到代理的权限。 -
IllegalArgumentException
- 如果proxy为null,或者proxy的类型错误,则抛出 -
UnsupportedOperationException
- 如果实现协议处理程序的子类不支持此方法。 - 从以下版本开始:
- 1.5
- 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLConnection
,URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
-
openStream
public final InputStream openStream() throws IOException
打开与此URL
的连接,并返回InputStream
以从该连接读取。 此方法是以下的简写:openConnection().getInputStream()
- 结果
- 用于从URL连接读取的输入流。
- 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
openConnection()
,URLConnection.getInputStream()
-
getContent
public final Object getContent() throws IOException
获取此URL的内容。 此方法是以下的简写:openConnection().getContent()
- 结果
- 此URL的内容。
- 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
URLConnection.getContent()
-
getContent
public final Object getContent(类<?>[] classes) throws IOException
获取此URL的内容。 此方法是以下的简写:openConnection().getContent(classes)
- 参数
-
classes
- Java类型的数组 - 结果
- 此URL的内容对象是classes数组中指定的类型的第一个匹配项。 如果不支持所请求的类型,则返回null。
- 异常
-
IOException
- 如果发生I / O异常。 - 从以下版本开始:
- 1.3
- 另请参见:
-
URLConnection.getContent(Class[])
-
setURLStreamHandlerFactory
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
设置应用程序的URLStreamHandlerFactory
。 在给定的Java虚拟机中,此方法最多可以调用一次。URLStreamHandlerFactory
实例用于根据协议名称构造流协议处理程序。如果有安全管理器,则此方法首先调用安全管理器的
checkSetFactory
方法以确保允许操作。 这可能会导致SecurityException。- 参数
-
fac
- 所需的工厂。 - 异常
-
Error
- 如果应用程序已设置工厂。 -
SecurityException
- 如果存在安全管理器且其checkSetFactory
方法不允许该操作。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandlerFactory
,SecurityManager.checkSetFactory()
-
-