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

public equals(Object obj)

此方法将此 URL 与另一个对象进行比较是否相等。

2

public String getAuthority()

该方法返回URL的权限。

3

public Object getContent()

此方法返回此 URL 的内容。

4

public Object getContent(ClassnootransL?nootransR[] classes)

此方法返回此 URL 的内容。

5

public int getDefaultPort()

此方法返回URL 协议的默认端口。

6

public String getFile()

此方法返回 URL 的文件名。

7

public String getHost()

此方法返回 URL 的主机。

8

public String getPath()

此方法返回 URL 的路径。

9

public int getPort()

此方法返回 URL 的端口。

10

public String getProtocol()

此方法返回URL的协议。

11

public String getQuery()

此方法返回 URL 的查询部分。

12

public String getRef()

此方法返回URL。

13

public String getUserInfo ()

此方法返回 URL 的 userInfo 部分。

14

public int hashCode()

此方法创建并返回适合哈希表索引的整数。

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

public String toString()

此方法构造并返回此 URL 的字符串表示形式。

22

public String toURI()

这个方法返回与此 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类有许多方法用于设置或确定有关连接的信息,包括以下内容 -

序号方法&描述
1

void addRequestProperty(String key, String value )

添加由键值对指定的通用请求属性。

2

boolean getAllowUserInteraction()

返回此对象的allowUserInteraction字段的值。

3

int getConnectTimeout()

返回连接超时设置。

4

Object getContent()

检索此 URL 连接的内容。

5

Object getContent(Class[] classes)

检索此 URL 的内容连接。

6

String getContentEncoding( )

返回内容编码标头字段的值。

7

int getContentLength()

返回内容长度标头字段的值。

8

long getContentLengthLong()

返回内容长度标头字段的值 long。

9

String getContentType()

返回内容类型标头字段的值。

10

long getDate()

返回日期标头字段的值。

11

static boolean getDefaultAllowUserInteraction()

返回allowUserInteraction字段的默认值。

12

boolean getDefaultUseCaches()

返回 URLConnection 的 useCaches 标志的默认值。

13

static boolean getDefaultUseCaches(String protocol)

返回给定协议的 useCaches 标志的默认值。

14

boolean getDoInput()

返回此 URLConnection 的 doInput 标志的值。

15

boolean getDoOutput()

返回此 URLConnection 的 doOutput 标志的值。

16

long getExpiration()

返回过期标头字段的值。

17

static FileNameMap getFileNameMap()

从数据文件。

18

String getHeaderField (int n)

返回第 n 个标头字段的值。

19

String getHeaderField(String name)

返回指定标头字段的值。

20

long getHeaderFieldDate(String name, long Default)

返回解析为日期的命名字段的值。

21

int getHeaderFieldInt(String name, int Default)

返回解析为数字的命名字段的值。

22

String getHeaderFieldKey(int n)

返回第 n 个标头字段的键。

23

long getHeaderFieldLong(String name, long Default)

返回解析为数字的命名字段的值。

24

MapnootransLString,ListnootransLStringnootransRnootransR getHeaderFields()

返回不可修改的标头字段映射。

25

long getIfModifiedSince()

返回此对象的 ifModifiedSince 字段的值。

26

InputStream getInputStream()

返回输入流从此打开的连接读取数据。

27

int getLastModified()

返回最后修改的标头字段的值。

28

OutputStream getOutputStream()

返回写入此连接的输出流。

29

permission getPermission()

返回一个权限对象,表示建立此对象表示的连接所需的权限。

30

int getReadTimeout()

返回读取超时设置。返回 0 意味着该选项被禁用(即无限超时)。

31

MapnootransLString,ListnootransLStringnootransRnootransR getRequestProperties()

返回此连接的常规请求属性的不可修改的映射。

32

String getRequestProperty(String key)

返回此连接的指定通用请求属性的值。

33

URL getURL()

返回此 URLConnection 的 URL 字段的值。

34

boolean getUseCaches()

返回此 URLConnection 的值useCaches 字段。

35

static StringguessContentTypeFromName(String fname)

尝试根据 URL 的指定“文件”组件确定对象的内容类型。

36

static StringguessContentTypeFromStream(InputStream is)

尝试根据输入流开头的字符确定输入流的类型。

37

void setAllowUserInteraction(boolean alloweduserinteraction)

设置此URLConnection的allowUserInteraction字段的值。

38

void setConnectTimeout(int timeout)

设置打开此 URLConnection 引用的资源的通信链接时使用的指定超时值(以毫秒为单位)。

39

static void setContentHandlerFactory(ContentHandlerFactory fac)

设置一个 ContentHandlerFactory应用程序。

40

static void setDefaultAllowUserInteraction (boolean defaultallowuserinteraction)

将所有未来 URLConnection 对象的 allowedUserInteraction 字段的默认值设置为指定值。

41

void setDefaultUseCaches(boolean defaultusecaches)

设置默认值useCaches 字段为指定值。

42

static void setDefaultUseCaches(String protocol, boolean defaultVal)

将指定协议的 useCaches 字段的默认值设置为给定值。

43

void setDoInput(boolean doinput)

将此 URLConnection 的 doInput 字段的值设置为指定值。

44

void setDoOutput(boolean dooutput)

将此 URLConnection 的 doOutput 字段的值设置为指定值。

45

static void setFileNameMap(FileNameMap map)

设置 FileNameMap。

46

void setIfModifiedSince(long ifmodifiedsince)

将此 URLConnection 的 ifModifiedSince 字段的值设置为指定值。

47

void setReadTimeout(int timeout)

将读取超时设置为指定值超时,以毫秒为单位。

48

void setRequestProperty(String key, String value)

设置通用请求属性。

49

void setUseCaches(boolean usecaches)

将此 URLConnection 的 useCaches 字段的值设置为指定值。

50

String toString ()

返回此 URL 连接的字符串表示形式。

示例

以下 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.....