java.lang.Object java.net.URL
public final class URLextends Objectimplements Serializable
类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。有关 URL 的类型和格式的更多信息,可从以下位置找到:
http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html
通常,URL 可分成几个部分。上面的 URL 示例指示使用的协议为 http
(超文本传输协议)并且该信息驻留在一台名为 www.socs.uts.edu.au
的主机上。主机上的信息名称为 /MosaicDocs-old/url-primer.html
。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径 部分。
URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http
协议的默认端口为 80
。还可以指定一个备用端口,如下所示:
http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
URL
的语法由此文档定义:RFC 2396:Uniform Resource Identifiers (URI):Generic Syntax;在此文件中对其内容又进行了修正:RFC 2732:Format for Literal IPv6 Addresses in URLs。字面值 IPv6 地址格式还支持 scope_id。scope_id 的语法和用法在此处进行了描述。
URL 后面可能还跟有一个“片段”,也称为“引用”。该片段由井字符 "#" 指示,后面跟有更多的字符。例如,
http://java.sun.com/index.html#chapter1
从技术角度来讲,URL 并不需要包含此片段。但是,使用此片段的目的在于表明,在获取到指定的资源后,应用程序需要使用文档中附加有 chapter1
标记的部分。标记的含义特定于资源。
应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。例如,假设 URL 的内容是:
其中包含的相对 URL:http://java.sun.com/index.html
为以下形式的缩写:FAQ.html
http://java.sun.com/FAQ.html
相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。但是,必须指定文件部分。可选的片段部分不继承。
URL 类自身并不根据 RFC2396 中定义的转义机制编码或解码任何 URL 部分。由调用方对任何需要在调用 URL 前进行转义的字段进行编码,并对从 URL 返回的任何经过转义的字段进行解码。进一步而言,由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。例如,对于这两个 URL:
http://foo.com/hello world/ 和 http://foo.com/hello%20world将被视为互不相等。
注意,URI
类在某些特定情况下对其组成字段执行转义。建议使用 URI
管理 URL 的编码和解码,并使用 toURI()
和 URI.toURL()
实现这两个类之间的转换。
也可以使用 URLEncoder
和 URLDecoder
类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。
构造方法摘要 | |
---|---|
URL(String spec) 根据 String 表示形式创建 URL 对象。 |
|
URL(String protocol, String host, int port, String file) 根据指定 protocol 、host 、port 号和 file 创建 URL 对象。 |
|
URL(String protocol, String host, int port, String file, URLStreamHandler handler) 根据指定的 protocol 、host 、port 号、file 和 handler 创建 URL 对象。 |
|
URL(String protocol, String host, String file) 根据指定的 protocol 名称、host 名称和 file 名称创建 URL。 |
|
URL(URL context, String spec) 通过在指定的上下文中对给定的 spec 进行解析创建 URL。 |
|
URL(URL context, String spec, URLStreamHandler handler) 通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。 |
package netCode;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//http://localhost:8080/wps/wechat/page/wechat.html
//http://v.huya.com/play/28409933.html?hyaction=recordedvideo&vid=28409933&cid=001
//http://study.163.com/course/courseLearn.htm?courseId=1003108028#/learn/video?lessonId=1003531336&courseId=1003108028
public class URLDemoClient {
public static void main(String[] args) throws IOException {
//1、获取URL对象
URL url = new URL("http", "v.huya.com", 80,
"/course/courseLearn.htm?courseId=1003108028#/learn/video?lessonId=1003531336&courseId=1003108028");
//2、建立连接,获取连接对象
URLConnection connection = url.openConnection();
//3、通过连接对象获取输入流对象
InputStream in = connection.getInputStream();
//4、获取扫描器对象
Scanner sc = new Scanner(in);
System.out.println("-----------start----------------");
//5、输出内容
while (sc.hasNext()) {
String str = sc.nextLine();
List list = new ArrayList<>();
CharSequence s = ".png";
CharSequence s1 = ".img";
CharSequence s2 = ".jpg";
CharSequence s3 = ".mp4";
CharSequence s4 = ".avi";
CharSequence s5 = ".gif";
list.add(s);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(".wmv");
list.add(".mpeg");
list.add(".mov");
list.add(".wmv");
list.add(".mkv");
list.add(".wmv");
list.add(".flv");
list.add(".wmv");
list.add(".f4v");
list.add(".m4v");
list.add(".rm");
list.add(".rmvb");
list.add(".3gp");
list.add(".dat");
list.add(".ts");
list.add(".mts");
list.add(".vob");
list.add(".php");
list.add("video");
list.add("&");
for (CharSequence charSequence : list) {
if (str.contains(charSequence)) {
String line = new String(str.getBytes(), "UTF-8");
System.out.println(line);
}
}
}
System.out.println("-------------end--------------");
in.close();
}
}