Java 简明教程

Java - URL Processing

URL 代表统一资源定位符,表示万维网上的资源,例如网页或 FTP 目录。

此部分向您展示如何编写与 URL 通信的 Java 程序。URL 可以分解为以下部分:

protocol://host:port/path?query#ref

协议示例包括 HTTPHTTPS、FTP 和 File。路径也称为文件名,主机也称为权限。

以下是一个协议为 HTTP 的网页的 URL:

https://www.amrood.com/index.htm?language=en#j2se

请注意此 URL 未指定端口,在这种情况下将使用该协议的默认端口。对于 HTTP,默认端口为 80。

Constructors

java.net.URL 类表示一个 URL,并具有用于在 Java 中处理 URL 的一组完整方法。

URL 类具有多个构造方法,用于创建 URL,包括以下方法:

Sr.No.

Constructors & Description

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 类中的一些方法包括以下方法:

Sr.No.

Method & Description

1

public equals(Object obj) 此方法比较 URL 与另一个对象的相等性。

2

public String getAuthority() 此方法返回 URL 的权限。

3

public Object getContent() 此方法返回此 URL 的内容。

4

public Object getContent(Class<?>[] 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() 该方法返回一个表示到 URL 所引用的远程对象连接的 URLConnection 实例。

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。

Example

以下 URLDemo 程序演示了 URL 的各个部分。URL 输入在命令行上,URLDemo 程序输出给定 URL 的每个部分。

// File Name : 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.tutorialspoint.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();
      }
   }
}

此程序的示例运行将生成以下结果 −

Output

URL is https://www.tutorialspoint.com/index.htm?language=en#j2se
protocol is https
authority is www.tutorialspoint.com
file name is /index.htm?language=en
host is www.tutorialspoint.com
path is /index.htm
port is -1
default port is 443
query is language=en
ref is j2se

URLConnections Class Methods

openConnection() 方法返回 java.net.URLConnection,其子类代表各种类型的 URL 连接的抽象类。

例如 -

  1. 如果您连接到协议为 HTTP 的 URL,则 openConnection() 方法返回 HttpURLConnection 对象。

  2. 如果您连接到表示 JAR 文件的 URL,则 openConnection() 方法返回 JarURLConnection 对象,等等。

URLConnection 类具有用于设置或确定有关连接信息的许多方法,包括以下方法 −

Sr.No.

Method & Description

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() 返回 content-encoding 标头字段的值。

7

int getContentLength() 返回 content-length 标头字段的值。

8

long getContentLengthLong() 返回 content-length 标头字段的值,类型为 long。

9

String getContentType() 返回 Content-Type 首部字段的值。

10

long getDate() 返回 Date 首部字段的值。

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() 返回 Expires 首部字段的值。

17

static FileNameMap getFileNameMap() 从数据文件中加载文件名映射(MIME 表)。

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

Map<String,List<String>> getHeaderFields() 返回首部字段的不可修改 Map。

25

long getIfModifiedSince() 返回此对象的 ifModifiedSince 字段的值。

26

InputStream getInputStream() 返回从这个打开的连接读取的输入流。

27

int getLastModified() 返回 Last-Modified 首部字段的值。

28

OutputStream getOutputStream() 返回一个写入此连接的输出流。

29

Permission getPermission() 返回一个许可对象,该对象代表建立此对象表示的连接所需的许可。

30

int getReadTimeout() 返回读取超时的设置。0 返回表示已禁用该选项(即无限超时)。

31

Map<String,List<String>> getRequestProperties() 返回此连接的常规请求属性的不可修改 Map。

32

String getRequestProperty(String key) 返回此连接的指定常规请求属性的值。

33

URL getURL() 返回此 URLConnection 的 URL 字段的值。

34

boolean getUseCaches() 返回此 URLConnection 的 useCaches 字段的值。

35

static String guessContentTypeFromName(String fname) 尝试根据 URL 的指定“file”组件确定对象的类型。

36

static String guessContentTypeFromStream(InputStream is) 尝试根据输入流开始处的字符确定输入流的类型。

37

void setAllowUserInteraction(boolean allowuserinteraction) 设置此 URLConnection 的 allowUserInteraction 字段的值。

38

void setConnectTimeout(int timeout) 设置一个指定的超时值(以毫秒为单位),在打开与该 URLConnection 引用的资源通讯的链接时使用该值。

39

static void setContentHandlerFactory(ContentHandlerFactory fac) 设置应用程序的内容处理程序工厂。

40

static void setDefaultAllowUserInteraction(boolean defaultallowuserinteraction) 为所有未来的 URLConnection 对象设置 allowUserInteraction 字段的默认值,该值为指定值。

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 连接的 String 表示形式。

Example

以下 URLConnectionDemo 程序连接到从命令行输入的 URL。

如果 URL 表示 HTTP 资源,则连接会被强制转换为 HttpURLConnection,并且资源中的数据会被逐行读取。

package com.tutorialspoint;

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.tutorialspoint.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();
      }
   }
}

此程序的示例运行将产生以下结果:

Output

$ java URLConnDemo

.....a complete HTML content of home page of tutorialspoint.com.....