Java URL 处理
URL 代表统一资源定位符,表示互联网上的资源,例如网页或 FTP 目录。
本节将向您展示如何编写与 URL 进行通信的 Java 程序。URL 可以被拆分为以下部分 –
protocol://host:port/path?query#ref
协议的示例包括HTTP,HTTPS,FTP和文件。路径也被称为文件名,主机也被称为权限。
以下是一个使用HTTP协议的网页的URL –
https://www.amrood.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和字符串参数创建URL。 |
URL类包含许多方法,用于访问表示的URL的各个部分。 URL类中的一些方法包括以下内容 –
编号 | 方法和描述 |
---|---|
1 | public String getPath() 返回URL的路径。 |
2 | public String getQuery() 返回URL的查询部分。 |
3 | public String getAuthority() 返回URL的授权信息。 |
4 | public int getPort() 返回URL的端口号。 |
5 | public int getDefaultPort() 返回URL协议的默认端口号。 |
6 | public String getProtocol() 返回URL的协议。 |
7 | public String getHost() 返回URL的主机名。 |
8 | public String getHost() 返回URL的主机名。 |
9 | public String getFile() 返回URL的文件名。 |
10 | public String getRef() 返回URL的引用部分。 |
11 | public URLConnection openConnection() throws IOException 打开到URL的连接,允许客户端与资源进行通信。 |
示例
下面的URLDemo程序演示了一个URL的各个部分。在命令行上输入一个URL,URLDemo程序会输出给定URL的每个部分。
// File Name : URLDemo.java
import java.net.*;
import java.io.*;
public class URLDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.amrood.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.amrood.com/index.htm?language=en#j2se
protocol is http
authority is www.amrood.com
file name is /index.htm?language=en
host is www.amrood.com
path is /index.htm
port is -1
default port is 80
query is language=en
ref is j2se
URLConnections 类方法
openConnection() 方法返回一个 java.net.URLConnection 对象,这是一个抽象类,其子类代表不同类型的URL连接。
例如 –
- 如果连接的URL协议是HTTP,则openConnection()方法返回一个HttpURLConnection对象。
-
如果连接的URL表示一个JAR文件,则openConnection()方法返回一个JarURLConnection对象,等等。
URLConnection 类有许多用于设置或确定连接信息的方法,包括以下内容 –
序号 | 方法和描述 |
---|---|
1 | Object getContent() 检索此URL连接的内容。 |
2 | Object getContent(Class[] classes) 检索此URL连接的内容。 |
3 | String getContentEncoding() 返回内容编码头字段的值。 |
4 | int getContentLength() 返回内容长度头字段的值。 |
5 | String getContentType() 返回内容类型头字段的值。 |
6 | int getLastModified() 返回最后修改日期头字段的值。 |
7 | long getExpiration() 返回过期日期头字段的值。 |
8 | long getIfModifiedSince() 返回此对象的ifModifiedSince字段的值。 |
9 | public void setDoInput(boolean input) 设置为true,表示连接将用于输入。默认值为true,因为客户端通常从URLConnection读取。 |
10 | public void setDoOutput(boolean output) 设置为true,表示连接将用于输出。默认值为false,因为许多类型的URL不支持写入。 |
11 | public InputStream getInputStream() throws IOException 返回用于从资源读取的URL连接的输入流。 |
12 | public OutputStream getOutputStream() throws IOException 返回用于写入资源的URL连接的输出流。 |
13 | public URL getURL() 返回此URLConnection对象连接的URL。 |
示例
下面的URLConnectionDemo程序连接到从命令行输入的URL。
如果URL表示一个HTTP资源,则将连接转换为HttpURLConnection,并逐行读取资源中的数据。
// File Name : URLConnDemo.java
import java.net.*;
import java.io.*;
public class URLConnDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.amrood.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 amrood.com.....