- java.lang.Object
-
- java.net.URL
-
- 实现的所有接口
-
Serializable
public final class URL extends Object implements 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的内容:
其中包含相对URL:http://java.sun.com/index.html
它将是一个简写:FAQ.htmlhttp://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。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 booleanequals(Object obj)将此URL与另一个对象进行相等性比较。StringgetAuthority()获取此URL的权限部分。ObjectgetContent()获取此URL的内容。ObjectgetContent(类<?>[] classes)获取此URL的内容。intgetDefaultPort()获取与此URL关联的协议的默认端口号。StringgetFile()获取此URL的文件名。StringgetHost()获取此URL的主机名(如果适用)。StringgetPath()获取此URL的路径部分。intgetPort()获取此URL的端口号。StringgetProtocol()获取此URL的协议名称。StringgetQuery()获取此URL的查询部分。StringgetRef()获取此URL的锚点(也称为“引用”)。StringgetUserInfo()获取此URL的userInfo部分。inthashCode()创建适合哈希表索引的整数。URLConnectionopenConnection()返回一个URLConnection实例表示由所引用的远程对象的连接URL。URLConnectionopenConnection(Proxy proxy)与openConnection()相同,但连接将通过指定的代理进行; 不支持代理的协议处理程序将忽略代理参数并进行正常连接。InputStreamopenStream()打开与此URL的连接并返回InputStream以从该连接读取。booleansameFile(URL other)比较两个URL,不包括片段组件。static voidsetURLStreamHandlerFactory(URLStreamHandlerFactory fac)设置应用程序的URLStreamHandlerFactory。StringtoExternalForm()构造此URL的字符串表示URL。StringtoString()构造此URL的字符串表示URL。URItoURI()返回与此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.pkgsnull,则将其解释为由垂直斜杠字符“|”分隔的包列表。 构造函数尝试加载名为的类:
其中<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“统一资源标识符:通用*语法”中所述:
引用被解析为方案,权限,路径,查询和片段部分。 如果路径组件为空并且未定义方案,权限和查询组件,则新URL是对当前文档的引用。 否则,规范中存在的片段和查询部分将用于新URL。<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()
-
-