Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java APIs 与框架

Java 类引用

Java 有用资源

Java - URL 处理



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。

构造函数

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 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 的用户信息部分。

14

public int hashCode()

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

15

public URLConnection openConnection()

此方法返回一个 URLConnection 实例,该实例表示与 URL 引用的远程对象之间的连接。

16

public URLConnection openConnection(Proxy proxy)

此方法的作用与 openConnection() 相同,只是连接将通过指定的代理进行;不支持代理的协议处理程序将忽略 proxy 参数并进行正常的连接。

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的每个部分。

// 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://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();
      }
   }
}

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

输出

URL is https://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 类方法

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()

返回content-encoding标头字段的值。

7

int getContentLength()

返回content-length标头字段的值。

8

long getContentLengthLong()

返回content-length标头字段的值(长整型)。

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()

从数据文件加载文件名映射(mimetable)。

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的指定“文件”组件确定对象的content type。

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)

设置应用程序的ContentHandlerFactory。

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

示例

下面的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://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();
      }
   }
}

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

输出

$ java URLConnDemo

.....a complete HTML content of home page of tutorialspoint.com.....
java_networking.htm
广告
© . All rights reserved.