代码编织梦想

Java中的URL类

远程连接来实现应用。而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作。

通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。其中包含了许多的语法元素。
从URL得到的数据可以是多种多样的,这些都需要一种统一的机制来完成对URL的读取与修改操作。Java语言在它的java.net软件包里就提供了这么一种机制。

URL class是从URL标示符中提取出来的。它允许Java程序设计人员打开某个特定URL连接,并对里边的数据进行读写操作以及对首部信息进行读写操作。而且,它还允许程序员完成其它的一些有关URL的操作。

构造

在创建java.net URL的实例的时候,你能够利用许多公共构造器,从而让其变得更具灵活性。举个例子来说,这个class提供了一种使用完整URL信息串的构造器,一种使 用把URL信息串分解成为协议、主机名以及文件和资源的构造器,还有一种把URL信息串分解成为协议、主机名、端口号以及文件的构造器。我们首先使用完整 的URL来创建一个URL class的例子:

URL aURL = new URL(“http://www.mycompany.com:8080/index.html”);

在这个例子中,我们创建了一个使用完整URL的URL class,其中明确指出了使用的协议是http,主机名称是www.mycompany.com,端口号码为8080,文件/资源为 index.html。如果组成URL的语法发生了错误,那么构造器就会发出MalformedURLException。

连接
  一旦你成功的创建了一个URL class的实例,你就可以对其进行操作了。但是在你能够访问这个URL上的资源和内容之前,你必须要打开到这些资源与内容上的连接。你可以通过使用openConnection来完成这一操作。

使用openConnection并不需要参数,并且在操作成功之后,它会返回一个URLConnection class的实例。在Listing A中,向我们演示了打开一个到URL连接的过程。一旦你的连接成功,你就可以开始对这个URLConnection的输入以及输出流进行读和写的操作了。
  
URL连接中读取数据

使用java.io stream class来从URL中读取数据是一个非常简单的过程。一旦你建立了一个成功的连接,那么你就可以获得针对这个连接的输入流并且开始进行写的操作了。很幸 运的是,java.io classes可以以与对文件流或者socket流进行操作的同样方式进行对从URLConnection流返回的数据进行操作。

URL进行写的操作

使用java.io stream classes对URL进行写的操作同样也是非常简单的。一旦你建立了一个成功的连接之后,你就可以得到来自此连接的输出流并且开始进行写的操作。当然, 只有对于客户所希望的数据进行写的操作才是有意义的。同样的,在获得并对URLConnection流进行写的操作之前,你还需要使用 setDoOutput(boolean)方式把输出(Output)属性设置为真(true)来指定可以进行写操作的那些连接。Java.io classes允许你把数据写到URLConnection流,这个操作也和你对文件流和socket流进行的写操作一样。
  
其它的操作

你可以从URL以及URLConnection对象连接中得到其它类型的信息,比如说主机名、端口、内容长度、内容编码以及内容的类型。把这些方法连同stream I/O classes一起使用可以让你建立复杂而有效的网络客户应用程序和服务。
  
对网络的便捷访问

由Java平台所提供的URL class让我们可以方便而有效的访问网络上的资源,而且可以让我们象访问本地文件一样的感到轻松愉快。我们不用为网络通讯的细节问题操心,只需要把注意力集中到制作有用的应用程序和服务上去。

三种连接方法:

            // 方法一 
           URL url = new URL("http://www.sina.com.cn");
           URLConnection urlcon = url.openConnection();
           InputStream is = urlcon.getInputStream();
          
            // 方法二
           URL url = new URL("http://www.yhfund.com.cn");
           HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();
           InputStream is = urlcon.getInputStream();
          
           //方法三
           URL url = new URL("http://www.yhfund.com.cn");
           InputStream is = url.openStream();

具体例子:

       try{
           long begintime = System.currentTimeMillis();
          
           URL url = new URL("http://www.baidu.com");
           HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();
           urlcon.connect();         //获取连接
           InputStream is = urlcon.getInputStream();
           BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
           StringBuffer bs = new StringBuffer();
           String l = null;
           while((l=buffer.readLine())!=null){
               bs.append(l).append("/n");
           }
           System.out.println(bs.toString());
          
           //System.out.println(" content-encode:"+urlcon.getContentEncoding());
           //System.out.println(" content-length:"+urlcon.getContentLength());
           //System.out.println(" content-type:"+urlcon.getContentType());
           //System.out.println(" date:"+urlcon.getDate());
                
           System.out.println("总共执行时间为:"+(System.currentTimeMillis()-begintime)+"毫秒");
        }catch(IOException e){
           System.out.println(e);
       }

根据url获取网络文件

private String openFile(String filePath) {
        int HttpResult; // 服务器返回的状态
        String ee = new String();
        try {
            URL url = new URL(filePath); // 创建URL
            URLConnection urlconn = url.openConnection(); // 试图连接并取得返回状态码
            urlconn.connect();
            HttpURLConnection httpconn = (HttpURLConnection) urlconn;
            HttpResult = httpconn.getResponseCode();
            if (HttpResult != HttpURLConnection.HTTP_OK) {
                System.out.print("无法连接到");
            } else {
                int filesize = urlconn.getContentLength(); // 取数据长度
                InputStreamReader isReader = new InputStreamReader(urlconn.getInputStream(), "UTF-8");
                BufferedReader reader = new BufferedReader(isReader);
                StringBuffer buffer = new StringBuffer();
                String line; // 用来保存每行读取的内容
                line = reader.readLine(); // 读取第一行
                while (line != null) { // 如果 line 为空说明读完了
                    buffer.append(line); // 将读到的内容添加到 buffer 中
                    buffer.append(" "); // 添加换行符
                    line = reader.readLine(); // 读取下一行
                }
                System.out.print(buffer.toString());
                ee = buffer.toString();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ee;
    }

快速入门Java中的URL(网络编程)

URL是初次接触Java网络编程的小白难以绕过的坎,而且它相当抽象。本文试着以最简单的方式向入门小白介绍Java中的URL对象使用。

目录:

  1. URL是什么
  2. Java中如何使用URL
  3. Java中URL的简单用例

1. URL是什么

  • URL是统一资源定位符。
    比如CSDN首页上地址栏这一个部分就是一个URL
    在这里插入图片描述
    即:
    https://www.csdn.net/?spm=1011.2124.3001.4476
    下面我们对这个URL的主要部分做一个解析:
    1.http:表示浏览器使用哪一种协议,也就是规定用户的电脑和CSDN的服务器之间用什么方式进行交流,此处只需要知道http是一种常见的协议即可。
    2.www.csdn.net:这一部分叫做域名,也就是CSDN的服务器的主机名(简单理解就是控制CSDN网站的电脑的名字),域名部分是URL的主要部分。只有知道了域名,浏览器才知道你想要访问哪一个网站。
    3.有一些URL会在域名之后带有端口号,用一个整数表示。相当于一家银行不同的窗口有不同的业务功能,不同的端口号对应着网站的不同功能。
    其余的部分我个人认为初学者可以不急于掌握,这里也就不做展开了。

2.Java中如何使用URL

在Java标准库中,有一个专门的URL类用于提供与URL有关的一些功能,使用时引用这个类即可。(java.net包中
初学者创建一个URL对象知道以下方法即可:(当然啦,也有更加复杂和专业的方法,遇到再学效果更好)

URL 对象名 = new URL(用字符串表示的URL)

创建URL对象可能抛出异常,需要进行异常处理或者抛出异常!
但是需要注意!URL的综合应用往往需要输入输出流部分的相关知识,如果你还没有对Java中的输入输出流有一个大致的了解,建议可以先去学一学输入输出流的相关知识,再来看下面的代码实例。

3.Java中URL的简单用例

要求:用URL类来抓取CSDN首页上的信息

import java.net.*;//使用URL类需要引用net包
import java.io.*;//使用输入输出流需要引用io包
public class URLTest
{
	public static void main(String[] args) throws Exception//URL对象创建可能抛出异常
	{
		URL cs = new URL("https://www.csdn.net/?spm=1011.2124.3001.4476");//创建一个URL对象,关联到CSDN站点首页
		BufferedReader in=new BufferedReader(new InputStreamReader(cs.openStream()));//创建一个缓冲输入流对象读取网站信息
		//按行读取并屏幕输出,直到最后一行
		String inputLine;
		while((inputLine=in.readLine())!=null)
		{
			System.out.println(inputLine);
		}
		in.close();//输入输出流对象使用后都要记得关闭对象
	}
}

程序运行结果若输出CSDN首页的html源代码则程序运行成功。(是的,URL抓取的信息只是一个网站的html代码,并不是直接显示网站上的所有显示内容

总结:
1.URL是不同网页的身份标识,每一个网页都有一个特定的URL与其对应,显示在网站的地址栏中。
2.Java中可以通过标准库中的URL类来抓取指定网站的内容,即指定网站的html源代码。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43842093/article/details/126983407

读书笔记系列——读《深入理解jvm第3版》笔记:java内存区域_dong__xue的博客-爱代码爱编程

java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据管理区域: 程序计数器:是当前线程所执行的字节码的行号指示器,每条线程要一个独立的程序计数器,故线程私有;不会发生OOM。 java虚拟机栈:是java方法执行的线程内存模型,线程私有;每个方法执行的时候虚拟机创建个栈帧,存储局部变量表、操作数栈、动态连接、方法出口等信息,

使用idea导入开发iuap2.0项目_四叶猫的博客-爱代码爱编程

前言 iuap2.0默认使用eclipse作为开发工具,但是实在是太卡太卡太卡了,所以计划导入到idea中,这样能节省大量的卡死时间,解决诸多问题后终于成功了,在这里做一个记录。 环境:idea 2021 2.4、tomc

前端面试指南——软实力篇_ruonorth的博客-爱代码爱编程

前言 如果想要通过面试,除了自身实力够硬以外,一些软技巧也可以帮助我们拿到理想的offer。如果说硬实力是道,那么技巧就是术。以下将会分为面试前准备,面试时发挥,高阶技巧,问题分为几个阶段来说。 面试准备 这个部分

力扣刷题练习——统计数组中的元素-爱代码爱编程

目录 645. 错误的集合 697. 数组的度 448. 找到所有数组中消失的数字 442. 数组中重复的数据 41. 缺失的第一个正数 274. H 指数 645. 错误的集合 集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字

java应用导致 cpu 100% 占用问题排查_java占用cpu特别高,无法生成日志-爱代码爱编程

JVM参数 "+“代表启用默认配置,”:"代表自定义配置 CPU 100% 占用问题排查 1、获取当前CPU占用情况 top 发现PID 2208 占用过大 2、获取当前所有JAVA进程,定位问题进程应用 jp

java.lang.class类 getconstructors()方法有什么功能呢?_.class.getconstructors()));-爱代码爱编程

转自: Java.lang.Class类 getConstructors()方法有什么功能呢? 下文讲述Class类中的getConstructors()方法的功能,如下所示: getConstructors()方法的功能 java.lang.Class.getConstructors()方法的功能 返回一个Constructor对象数组 返回指定

通用orm的设计与实现_orm pdf 设计-爱代码爱编程

介绍 我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的想法是,将关系数据库拥有的完善设计工具之优势,来实现数据设计以提供结构信息,让json对象自动映射成为标准的SQL查询语句。只要我们理解

面了个阿里拿38k出来的,让我见识到了基础顶端-爱代码爱编程

2022年的金九银十已经进入,各大论坛和社区里也看见不少小伙伴慷慨地分享了自己的面经和八股文,今天整理的这份笔记是鄙人在行业内的朋友们的真实面试经验总结出来的,希望这份笔记可以给需要面试的、准备面试的朋友一些帮助。肝完这一份,38K妥了! 这份总结内容涵盖极广,包含了 22个技术栈 基础篇JVM篇多线程&并发篇Spring篇SpringBoot

[随手记]activity生命周期-爱代码爱编程

onStop:不一定会执行/马上执行 A拉起B,正常生命周期顺序:A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop() 如果B是透明页面:A.onPause() -> B.onCreate() -> B.onStart() -

顺序表(c++实现)_顺序表前驱后继-爱代码爱编程

数据结构(面向对象方法与C++语言描述)(第2版)线性表内容整理 顺序表 顺序表是基于数组的线性表的存储表示,其特点是用物理位置上的邻接关系来表示结点间的逻辑关系。 优点: (1)无需为表示结点间的逻辑关系而增加额外

jdbc(一)-爱代码爱编程

视频链接:https://www.bilibili.com/video/BV1Bt41137iB?vd_source=9545770e4a2968c05878ffac8589ec6c 视频选集:P1— P13 文章

oceanbase荣获oscar两项大奖,开源已成主流开发模式-爱代码爱编程

2022 年 9 月 16 日,在由中国信息通信研究院(简称中国信通院)主办的“2022 OSCAR 开源产业大会"上,企业级开源原生分布式数据库 OceanBase 荣获“2022 OSCAR 尖峰开源项目和社区”、“20

vue.js 组件通信一 父组件向子组件传值——通过props_vue父子组件传值props-爱代码爱编程

组件通信概述 组件之间虽然有父子关系,但还是互相独立的。互相之间并不能直接操作对方的数据。这是出于安全性考虑的。组件之间是有通信需求的,vue为我们提供了两者方式来实现父子组件之间的通信。分别是props(父传子)和emi

dubbo的架构设计是怎样的?_dubbole 架构-爱代码爱编程

架构分层 Dubbo中的架构设计是⾮常优秀的,分为了很多层次,并且每层都是可以扩展的,⽐如: Proxy服务代理层,⽀持JDK动态代理、javassist等代理机制 Registry 注册中⼼层,⽀持Zookeeper、Redis等作为注册中⼼ Protocol 远程调⽤层, ⽀持D

【maven】 基于java的 maven项目对象模型认识-爱代码爱编程

Maven介绍 Maven 是一个项目管理和 综合工具,Maven 提供了开发人员构建一个完整的生命周期框架,开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构 和 默认构建生命周期 Maven 是什

java.lang.character类中isuppercase()方法具有什么功能呢?_character.isuppercase-爱代码爱编程

转自: Java.lang.Character类中isUpperCase()方法具有什么功能呢? 下文笔者将讲述Character类中isUpperCase()方法的功能,如下所示: Java.lang.CHaracter之isUpperCase()方法的功能 isUpperCase()方法的功能: 用于检测指定字符是否为大写字母 isUpper