Java中的URL类根据url获取网络文件快速入门Java中的URL(网络编程)

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); // 创建URLURLConnection 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源代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC中Controller为什么能够处理并发访问?Springboot中的定时任务是否会发生阻塞?

文章目录SpringMVC中Controller为什么能够处理并发访问?当多个请求同时访问服务器的时候Controller、Service、DAO是线程安全的吗?关于类中的变量Controller、Service、DAO等类都默认为单例模式Controller、Service、DAO等类中的方法当中的并发问题关于D…

Java进阶 - 易错知识点整理

转载:https://blog.csdn.net/qq_33934427/article/details/125903960 文章目录1、JavaEE2、网络基础3、Mysql4、Spring/SpringMVC(IOC装配、AOP增强、常用注解)5、Spring Boot/Spring Cloud1)SpringBoot部分2)SpringCl…

MySQL 视图(详解) navicat如何创建视图

文章目录MySQL 视图(详解一,视图概念使用视图的原因二,创建视图(1)基本语法(2)创建基于单表的视图【实例 1】【实例 2】(3)创建基于多表的视图【实例 3】(4&a…

使用set集合去除重复元素@EqualsAndHashCode注解

如何使用set集合去重 ​ 我们都知道,set集合是无序的,这样也导致set集合里面的元素是不能重复的,因为这一个特性,所以我们经常用set集合进行去重操作,我们下面以一个简单的例子说明set集合是如何进行去重的。 创建去…

缺少构造方法:Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp

今天遇到了一个奇怪的错误,报错如下图所示: org.springframework.dao.DataIntegrityViolationException: Error attempting to get column question_id from result set. Cause: java.sql.SQLDataException: Unsupported conversion from LONG to java…

SpringBoot瘦身打包部署

一、前言 最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时,编译出来的 Jar 包很大(服务器多达500MB)。 二、瘦身前的Jar包 SpringBoot编译出来的Jar包中,磁盘占用大的,是一些外部依赖库&#xff…

XShell直接拖拽文件到服务器,不使用Xftp等文件上传工具

很多情况下,我们使用 Xshell 工具时,如果遇到文件的上传和下载会不可避免的要用到另外一个工具 Xftp,但是频繁的使用 Xftp 会比较麻烦,那么有没有一种更加直接简单的方法呢? 当我们所需要上传的文件比较小的时候&…

System.getProperty()方法获取系统变量

今天在阅读JDBC的DriverManager类源码时,看到了这么一句代码: System.getProperty(“jdbc.drivers”);getProperty()这个方法是获取指定键指示的系统属性的,也就是说上面的代码获取的是jdbc.drivers这个属性。我写了个测试测试输…

局部变量为什么必须赋值才可以使用

在java内存模型中规定,一个新的变量只能在主存中初始化,不允许在工作内存中直接使用一个未被初始化的变量。 工作内存可以理解为局部变量定义的内存区域,也就是线程的工作内存。所谓局部变量就是线程私有的不共享的空间。 类加载准备阶段 类变…

Java 赋值 “=” 讲解

前言 我们从接触java第一天,就是到 是赋值的意思,把等号右边结果的值,赋给等号左边的变量,那具体是怎样赋值呢?你有了解过吗? 1.0版本 大家都知道,java中有 8大基本类型,对于基本…

Linux 系统管理命令:时间、进程、网络、磁盘、关机重启等 top命令用法详解

文章目录系统管理常用命令1. 日期1.1 查看日历: cal1.2 查看/设置时间: date2. 进程2.1 查看进程信息: ps2.2 动态显示进程信息: top2.3 终止进程: kill2.4 服务的管理: service3. 网络3.1 网卡信息查询与配置: ifconfig3.2 检测远程主机连通性: ping3.3 查看网络状态(监听端口…

Java8中计算时间的四种方式及区别Period、Duration、ChronoUnit、Until 时间区间Duration的简单使用

一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit二.Period类 Period类计算只有年、月、日 计算的是LocalDate两个时间间隔的年月日 public static void main(String[] args) {LocalDate startTime Loc…

[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

引言 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接触可能会感觉有点乱&a…

【Java多线程】内存模型JMM—主内存与工作内存分析

文章目录JAVA内存模型JVM主内存与工作内存描述JVM内存间交互规则JVM先行发生原则内存交互基本操作的 3 个特性原子性(Atomicity)可见性(Visibility)有序性(Ordering)上述内存模型与Java多线程之间的问题JAVA内存模型 共享变量:如果一个变量在多个线程的工作内存中都…

SpringBoot配置MyBatis的sql执行超时时间(mysql)

当某些sql因为不知名原因堵塞时,为了不影响后台服务运行,想要给sql增加执行时间限制,超时后就抛异常,保证后台线程不会因为sql堵塞而堵塞。 方法一 yml全局配置:单数据源可以,多数据源时会失效 方法二 j…

HTTP协议中的302,303状态码

之前也只知道302,303是请求重定向,但是当被问到302,303的具体区别是什么的时候我有点迷,现在就为了加强记忆,来了解下具体情况: 302是http1.0的内容,303是http1.1的内容。301和302本来在规范中是不允许重定向时改变请求方法的(将POST改为GET&#xff09…

Spring自带工具类(断言、ObjectUtils、FileCopyUtils、ResourceUtils、StreamUtils、ReflectionUtils、AopUtils、AopCont)

文章目录断言对象、数组、集合文件、资源、IO 流反射、AOP断言 断言是一个逻辑判断,用于检查不应该发生的情况Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法…

Arrays.asList踩坑——引发的Exception in thread “main“ java.lang.UnsupportedOperationException

Exception in thread “main” java.lang.UnsupportedOperationException 如果你尝试修改Arrays.asList方法生产的List&#xff0c;那么就会报这个错误 public static void main(String[] args) {Integer[] arr new Integer[]{7,8,9};List<Integer> list Arrays.asLi…

GIS算法:JAVA拓扑套件JTS

常用可以用于GIS数据处理和空间计算的java包有geotool和jts。 相对来说&#xff0c;geotool功能更全面&#xff0c;还可以用于数据转换、瓦片地图发布、栅格影像分析等&#xff0c;jts只能进行基本的数据处理和空间计算。 但大多数情况下jts就完全够用了。 geotool的官网&am…

Java本地远程服务器debug调试详解

日常我们debug是经常用的&#xff0c;但是本地还好说&#xff0c;远程debug就有点难度&#xff0c;而且有时候必须要在预演&#xff0c;测试环境的服务器去debug&#xff0c;举个例子&#xff0c;需要https&#xff0c;公网&#xff0c;域名之类的&#xff0c;测试服务器这些有…