Java 教程
- Java - 首页
- Java - 概述
- Java - 历史
- Java - 特性
- Java 与 C++
- JVM - Java 虚拟机
- Java - JDK 与 JRE 与 JVM
- Java - Hello World 程序
- Java - 环境设置
- Java - 基本语法
- Java - 变量类型
- Java - 数据类型
- Java - 类型转换
- Java - Unicode 系统
- Java - 基本运算符
- Java - 注释
- Java - 用户输入
- Java - 日期与时间
Java 控制语句
- Java - 循环控制
- Java - 决策制定
- Java - if-else
- Java - switch
- Java - for 循环
- Java - for-each 循环
- Java - while 循环
- Java - do-while 循环
- Java - break
- Java - continue
面向对象编程
- Java - OOPs 概念
- Java - 对象与类
- Java - 类属性
- Java - 类方法
- Java - 方法
- Java - 变量作用域
- Java - 构造函数
- Java - 访问修饰符
- Java - 继承
- Java - 聚合
- Java - 多态
- Java - 重写
- Java - 方法重载
- Java - 动态绑定
- Java - 静态绑定
- Java - 实例初始化块
- Java - 抽象
- Java - 封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java - 静态类
- Java - 匿名类
- Java - 单例类
- Java - 包装类
- Java - 枚举
- Java - 枚举构造函数
- Java - 枚举字符串
Java 内置类
Java 文件处理
Java 错误与异常
- Java - 异常
- Java - try-catch 块
- Java - try-with-resources
- Java - 多重 catch 块
- Java - 嵌套 try 块
- Java - finally 块
- Java - throw 异常
- Java - 异常传播
- Java - 内置异常
- Java - 自定义异常
Java 多线程
- Java - 多线程
- Java - 线程生命周期
- Java - 创建线程
- Java - 启动线程
- Java - 线程连接
- Java - 线程命名
- Java - 线程调度器
- Java - 线程池
- Java - 主线程
- Java - 线程优先级
- Java - 守护线程
- Java - 线程组
- Java - 关闭钩子
Java 同步
Java 网络编程
- Java - 网络编程
- Java - 套接字编程
- Java - URL 处理
- Java - URL 类
- Java - URLConnection 类
- Java - HttpURLConnection 类
- Java - Socket 类
- Java - 泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java - 命令行参数
- Java - Lambda 表达式
- Java - 发送邮件
- Java - Applet 基础
- Java - Javadoc 注释
- Java - 自动装箱和拆箱
- Java - 文件不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 文件
- Java - 私有接口方法
- Java - 内部类菱形运算符
- Java - 多分辨率图像 API
- Java - 集合工厂方法
- Java - 模块系统
- Java - Nashorn JavaScript
- Java - Optional 类
- Java - 方法引用
- Java - 函数式接口
- Java - 默认方法
- Java - Base64 编码解码
- Java - switch 表达式
- Java - Teeing 收集器
- Java - 微基准测试
- Java - 文本块
- Java - 动态 CDS 归档
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指针异常
- Java - 打包工具
- Java - 密封类
- Java - 记录类
- Java - 隐藏类
- Java - 模式匹配
- Java - 简洁数字格式化
- Java - 垃圾回收
- Java - JIT 编译器
Java 杂项
- Java - 递归
- Java - 正则表达式
- Java - 序列化
- Java - 字符串
- Java - Process API 改进
- Java - Stream API 改进
- Java - 增强的 @Deprecated 注解
- Java - CompletableFuture API 改进
- Java - 流
- Java - 日期时间 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java APIs 与框架
Java 类引用
- Java - Scanner
- Java - 数组
- Java - 字符串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用资源
Java - URL 处理
URL 代表统一资源定位符,它代表万维网上的资源,例如网页或 FTP 目录。
本节将向您展示如何编写与 URL 通信的 Java 程序。URL 可以分解成以下部分:
protocol://host:port/path?query#ref
协议示例包括 HTTP、HTTPS、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 |
此方法比较此 URL 与另一个对象的相等性。 |
| 2 |
此方法返回 URL 的授权部分。 |
| 3 |
此方法返回此 URL 的内容。 |
| 4 | public Object getContent(Class<?>[] classes) 此方法返回此 URL 的内容。 |
| 5 |
此方法返回 URL 协议的默认端口。 |
| 6 |
此方法返回 URL 的文件名。 |
| 7 |
此方法返回 URL 的主机。 |
| 8 |
此方法返回 URL 的路径。 |
| 9 |
此方法返回 URL 的端口。 |
| 10 |
此方法返回 URL 的协议。 |
| 11 |
此方法返回 URL 的查询部分。 |
| 12 |
此方法返回 URL 的引用部分。 |
| 13 |
此方法返回 URL 的用户信息部分。 |
| 14 |
此方法创建并返回一个适合哈希表索引的整数。 |
| 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 |
此方法构造并返回此URL的字符串表示形式。 |
| 22 |
此方法返回与此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 |
返回连接超时设置。 |
| 4 |
检索此URL连接的内容。 |
| 5 | Object getContent(Class[] classes) 检索此URL连接的内容。 |
| 6 |
返回content-encoding标头字段的值。 |
| 7 |
返回content-length标头字段的值。 |
| 8 |
返回content-length标头字段的值(长整型)。 |
| 9 |
返回content-type标头字段的值。 |
| 10 |
返回date标头字段的值。 |
| 11 | static boolean getDefaultAllowUserInteraction() 返回AllowUserInteraction字段的默认值。 |
| 12 |
返回URLConnection的useCaches标志的默认值。 |
| 13 | static boolean getDefaultUseCaches(String protocol) 返回给定协议的useCaches标志的默认值。 |
| 14 |
返回此URLConnection的doInput标志的值。 |
| 15 |
返回此URLConnection的doOutput标志的值。 |
| 16 |
返回expires标头字段的值。 |
| 17 | static FileNameMap getFileNameMap() 从数据文件加载文件名映射(mimetable)。 |
| 18 |
返回第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 |
返回此对象的ifModifiedSince字段的值。 |
| 26 |
返回一个从这个打开的连接读取的输入流。 |
| 27 |
返回last-modified标头字段的值。 |
| 28 | OutputStream getOutputStream() 返回一个写入此连接的输出流。 |
| 29 |
返回一个权限对象,表示对此对象表示的连接进行连接所需的权限。 |
| 30 |
返回读取超时设置。返回0表示该选项已禁用(即无限超时)。 |
| 31 | Map<String,List<String>> getRequestProperties() 返回此连接的通用请求属性的不可修改的Map。 |
| 32 | String getRequestProperty(String key) 返回此连接的指定通用请求属性的值。 |
| 33 |
返回此URLConnection的URL字段的值。 |
| 34 |
返回此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 |
返回此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.....