本教程针对JDK 8编写。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
创建URL
对象的最简单方法是使用表示URL地址的String
。这通常是另一个人将用于URL的形式。在您的Java程序中,您可以使用包含此文本的String
来创建URL
对象:
URL myURL = new URL("http://example.com/");
上面创建的URL
对象表示一个绝对URL。绝对URL包含到达所讨论资源所需的所有信息。您还可以从相对URL地址创建URL
对象。
相对URL只包含足够的信息,以相对于(或在上下文中)另一个URL到达资源。
相对URL规范通常在HTML文件中使用。例如,假设您编写了一个名为JoesHomePage.html
的HTML文件。在此页面中,有指向其他页面PicturesOfMe.html
和MyKids.html
的链接,它们位于与JoesHomePage.html
相同的机器和目录中。从JoesHomePage.html
到PicturesOfMe.html
和MyKids.html
的链接可以像文件名一样指定,如下所示:
<a href="PicturesOfMe.html">我的照片</a> <a href="MyKids.html">我的孩子照片</a>
这些URL地址是相对URL。也就是说,这些URL是相对于包含它们的文件JoesHomePage.html
指定的。
在您的Java程序中,您可以从相对URL规范创建一个URL
对象。例如,假设您知道站点example.com
上的两个URL:
http://example.com/pages/page1.html http://example.com/pages/page2.html
您可以相对于它们的共同基本URL http://example.com/pages/
创建这些页面的URL
对象,如下所示:
URL myURL = new URL("http://example.com/pages/"); URL page1URL = new URL(myURL, "page1.html"); URL page2URL = new URL(myURL, "page2.html");
这段代码使用了一个构造方法,允许您从另一个URL
对象(基本URL)和相对URL规范创建URL
对象。此构造方法的一般形式为:
URL(URL baseURL, String relativeURL)
第一个参数是一个URL
对象,用于指定新URL
的基础。第二个参数是一个String
,用于指定相对于基础的其余资源名称。如果baseURL
为null,则此构造方法将relativeURL
视为绝对URL规范。反之,如果relativeURL
是绝对URL规范,则构造方法将忽略baseURL
。
这个构造函数还可以用于创建文件内的命名锚点(也称为引用)的URL
对象。例如,假设page1.html
文件在文件底部有一个名为BOTTOM
的命名锚点。你可以使用相对URL构造函数来创建一个URL
对象,如下所示:
URL page1BottomURL = new URL(page1URL,"#BOTTOM");
URL
类提供了两个额外的构造函数来创建URL
对象。当你使用带有主机名、文件名、端口号和引用组件的URL(如HTTP URL)时,这些构造函数非常有用。当你没有一个包含完整URL规范的字符串,但你知道URL的各个组件时,这两个构造函数非常有用。
例如,假设你设计了一个类似文件浏览面板的网络浏览面板,允许用户选择协议、主机名、端口号和文件名。你可以使用面板的组件构造一个URL
。第一个构造函数通过协议、主机名和文件名创建一个URL
对象。以下代码片段创建了一个URL
到example.com
站点上的page1.html
文件:
new URL("http", "example.com", "/pages/page1.html");
这等同于
new URL("http://example.com/pages/page1.html");
第一个参数是协议,第二个是主机名,最后是文件的路径名。请注意,文件名以斜杠开头。这表示文件名是从主机的根目录指定的。
最后的URL
构造函数将端口号添加到上一个构造函数中使用的参数列表中:
URL gamelan = new URL("http", "example.com", 80, "pages/page1.html");
这将创建一个URL
对象,指向以下URL:
http://example.com:80/pages/page1.html
如果你使用其中一个构造函数构造一个URL
对象,你可以通过使用URL
对象的toString
方法或等效的toExternalForm
方法来获取包含完整URL地址的String
。
一些URL地址包含特殊字符,例如空格字符。就像这样:
http://example.com/hello world/
为了使这些字符合法,需要在传递给URL构造函数之前对它们进行编码。
URL url = new URL("http://example.com/hello%20world");
在这个例子中,对特殊字符进行编码很容易,因为只有一个字符需要编码。但是对于有多个这些字符的URL地址,或者当编写代码时不确定需要访问哪些URL地址时,可以使用java.net.URI
类的多参数构造函数自动处理编码。
URI uri = new URI("http", "example.com", "/hello world/", "");
然后将URI转换为URL。
URL url = uri.toURL();
如果构造函数的参数引用了null
或未知的协议,每个URL
构造函数都会抛出MalformedURLException
异常。通常,您需要通过将URL构造函数语句嵌入到try
/catch
语句中来捕获和处理此异常,如下所示:
try { URL myURL = new URL(...); } catch (MalformedURLException e) { // 在这里处理异常 // ... }
有关处理异常的信息,请参阅异常。
URL
是"写入一次"的对象。一旦创建了URL
对象,就不能更改其任何属性(协议、主机名、文件名或端口号)。