URL 代表统一资源定位器,代表万维网上的资源,例如网页或 FTP 目录。
本节向您展示如何编写与 URL 通信的 Java 程序。 URL 可以分为几个部分,如下所示
protocol://主机:端口/路径?query#ref
协议示例包括 HTTP、HTTPS、FTP 和File。路径也称为文件名,主机也称为权限。
以下是协议为 HTTP 的网页的 URL
https://www.yxjc123.com/index.htm?language=en#j2se
请注意,此 URL 未指定端口,在这种情况下,将使用协议的默认端口。对于 HTTP,默认端口为 80。
构造函数
java.net.URL 类表示一个 URL,并具有一整套可操作的方法Java 中的 URL。
URL 类有几个用于创建 URL 的构造函数,包括以下内容 -
序号. | 构造函数和构造函数描述 |
---|---|
1 | public URL(String protocol, String host, int port, String file) throws MalformedURLException 通过将给定部分放在一起创建 URL。 |
2 | public URL(String protocol, String host, String file) throws MalformedURLException 与前面的构造函数相同,但给定的是协议的默认端口 |
3 | public URL(String url) throws MalformedURLException 根据给定的字符串创建 URL。 |
4 | public URL(URL context, String url) throws MalformedURLException 通过解析 URL 和 String 参数来创建 URL。 |
URL 类包含许多用于访问所表示的 URL 各个部分的方法。 URL 类中的一些方法包括以下内容 -
序号 | 方法&说明 |
---|---|
1 | 此方法将此 URL 与另一个对象进行比较是否相等。 |
2 | 该方法返回URL的权限。 |
3 | 此方法返回此 URL 的内容。 |
4 | public Object getContent(ClassnootransL?nootransR[] classes) 此方法返回此 URL 的内容。 |
5 | 此方法返回URL 协议的默认端口。 |
6 | 此方法返回 URL 的文件名。 |
7 | 此方法返回 URL 的主机。 |
8 | 此方法返回 URL 的路径。 |
9 | 此方法返回 URL 的端口。 |
10 | 此方法返回URL的协议。 |
11 | 此方法返回 URL 的查询部分。 |
12 | 此方法返回URL。 |
13 | 此方法返回 URL 的 userInfo 部分。 |
14 | 此方法创建并返回适合哈希表索引的整数。 |
15 | public URLConnection openConnection() 此方法返回一个 URLConnection 实例,该实例表示与 URL 引用的远程对象的连接。 |
16 | public URLConnection openConnection(Proxy proxy) 此方法充当 openConnection(),除了连接将通过指定的代理进行;不支持代理的协议处理程序将忽略代理参数并进行正常连接。 |
17 | public InputStream openStream() 此方法打开与此 URL 的连接,并返回一个用于从该连接读取的 InputStream。 |
18 | public boolean sameFile(URL other) 此方法比较两个 URL,不包括片段组件。 |
19 | public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) 此方法设置应用程序的 URLStreamHandlerFactory。 |
20 | public String toExternalForm() 此方法构造并返回此 URL 的字符串表示形式。 |
21 | 此方法构造并返回此 URL 的字符串表示形式。 |
22 | 这个方法返回与此 URL 等效的 URI。 |
示例
以下 URLDemo 程序演示了URL 的各个部分。在命令行中输入 URL,URLDemo 程序输出给定 URL 的各个部分。
// 文件名:URLDemo.java
import java.io.IOException;
import java.net.URL;
public class URLDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.yxjc123.com/index.htm?language=en#j2se");
System.out.println("URL is " + url.toString());
System.out.println("protocol is " + url.getProtocol());
System.out.println("authority is " + url.getAuthority());
System.out.println("file name is " + url.getFile());
System.out.println("host is " + url.getHost());
System.out.println("path is " + url.getPath());
System.out.println("port is " + url.getPort());
System.out.println("default port is " + url.getDefaultPort());
System.out.println("query is " + url.getQuery());
System.out.println("ref is " + url.getRef());
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序的示例运行将产生以下结果 -
输出
URL is https://www.yxjc123.com/index.htm?language=en#j2se
protocol is https
authority is www.yxjc123.com
file name is /index.htm?language=en
host is www.yxjc123.com
path is /index.htm
port is -1
default port is 443
query is language=en
ref is j2se
URLConnections 类方法
openConnection() 方法返回一个 java.net.URLConnection,一个抽象类,其子类表示各种类型的 URL 连接。
例如
如果您连接到协议为 HTTP 的 URL,则 openConnection() 方法将返回 HttpURLConnection 对象。
如果连接到表示 JAR 文件的 URL,openConnection() 方法将返回 JarURLConnection 对象等。
URLConnection类有许多方法用于设置或确定有关连接的信息,包括以下内容 -
示例
以下 URLConnectionDemo 程序连接到从命令行输入的 URL。
如果 URL 表示 HTTP 资源,则连接将转换为 HttpURLConnection,并且资源中的数据为一次读取一行。
package com.yxjc123;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class URLConnDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.yxjc123.com");
URLConnection urlConnection = url.openConnection();
HttpURLConnection connection = null;
if(urlConnection instanceof HttpURLConnection) {
connection = (HttpURLConnection) urlConnection;
}else {
System.out.println("Please enter an HTTP URL.");
return;
}
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String urlString = "";
String current;
while((current = in.readLine()) != null) {
urlString += current;
}
System.out.println(urlString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序的示例运行将产生以下结果 -
输出
$ java URLConnDemo
.....a complete HTML content of home page of yxjc123.com.....