赞
踩
目录
2.4使用URL类下载深大首页,并统计下载得到网页文件的大小
学习网络编程基本概念、InetAddress的应用、URL的应用、URLConnection的应用
InetAddress类和URLConnection类的使用
Internet上的主机有两种表示地址的方式:域名和IP地址。有时候需要通过域名来查找它对应的IP地址,有时候又需要通过IP地址来查找主机名。这时候可以利用java.net包中的InetAddress类来完成任务。
InetAddress类是IP地址封装类,同时它也是一个比较奇怪的类,它没有公共的构造方法,只能利用该类的一些静态方法来获取对象实例,然后再通过这些对象实例来对IP地址或主机名进行处理。该类常用的一些静态方法有如下。
此外,该类还有一些其他常用的方法,具体如下:
由于我们已经学习了InetAddress类的一些方法,在此,我们可以直接利用getLocalHost方法获取本地主机名和本地地址。
图 1 获取本机名与地址的代码
如图 1,第一行引入所需的java.net包。在主函数内,先定义InetAddress类,并调用getLocalHost方法获取对应的地址,最后将结果进行输出即可。
图 2 获取本机名与地址的输出
如图 2,即为输出的结果,我们电脑的主机名为“YunhaoAlienware”,地址为192.168.85.1
由于我们已经学习了InetAddress类的一些方法,在此,我们可以直接利用getAllByName方法,将所有IP地址存入一个列表并进行输出。
图 3 获取CSDN的所有IP地址代码
如图 3,第一行引入所需的java.net包。在主函数内,先定义InetAddress类的数组,并调用getAllByName方法获取所有的IP地址并存入数组,最后将结果进行输出即可。
图 4 获取CSDN的所有IP地址的输出
如图 4,即为输出的结果,CSDN只有一个IP地址,为39.106.226.142。
URL 类代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。通常,URL 可分成几个部分。
如https://www1.szu.edu.cn/board/view.asp,该 URL 示例指示使用的协议为 https (超文本传输安全协议)并且该信息驻留在一台名为www1.szu.edu.cn 的主机上。主机上的信息名称为/board/view.asp。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径部分。
此外,URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80。
URL类有如下6种构造方法:
此外,URL类还有一些其他常用的方法,具体如下:
URLConnection是一个抽象类,表示指向URL指定资源的活动连接。URL类中的openConnection()方法可生成一个URLConnection对象,URLConnection类的实例可用于读取和写入此URL引用的资源。在网络编程工作中,JAVA的URLConnection是一个常用的类,它提供了一个非常方便的接口,只要提供需要连接的主机的URL地址,使用URL类的openConnection()方法就可以得到一个HttpURLConnection的对象,其中HttpURLConnection类是URLConnection类的子类,然后在此基础上分析HTTP内容,完成相关任务。在这种方式下,使用者不必考虑底层的实现细节,避免了烦琐的Socket类的代码编写,因此比较常用
URLConnection类常用的构造方法只有一个,即通过URL获取对应的URLConnection类:
在建立了远程对象后,则会经常使用如下方法来获取对应的值:
URL类经常用于下载网络资源,URL通过构造函数(构造函数为URL地址)可以得到一个对象,该对象的openStream()方法可以得到InputStream对象,得到InputStream就可以把网站上的资源下载下来了。下面是一个实例,使用URL类下载某个网站上的一张图片并保存到本地。
图 5 使用URL下载图片的代码
如图 5,前两行引入所需的包,第6,7行借助URL类获取输入流,并在第9-13行利用循环将输入流存入本地文件中。
图 6 使用URL下载的图片
如图 6,即为使用URL下载的图片。
由于我们已经学习了URL类的一些方法,在此,我们可以直接利用URL类建立连接,并通过结合URLConnection类的方法,借助流来获取深大首页的文件。
图 7 URL类下载深大首页代码
如图 7,首先前三行引入所需的包。第8,9行借助URL类和URLConnection类建立连接,第11行使用getInputStream方法获取对应的输入流,第12行使用文件流创建文件。然后第13-17行利用while循环将内容读入到文件中。最后19-20行借助文件获取对应html文件的大小。
图 8 获取的html文件的大小
图 9 获取的HTML文件
如图 9,获取的深大主页的文件如图所示;如图 8,获取的html文件的大小为92.9kb。
代码如下:
- import java.io.*;
- import java.net.InetAddress;
- import java.net.URL;
- import java.net.URLConnection;
-
- public class Main {
- public static void main(String[] args) throws IOException {
- //使用InetAddress类的方法获取本地机的名称和IP地址
- InetAddress address = InetAddress.getLocalHost();
- System.out.println("Localhost:" + address);
-
- //使用InetAddress类的方法获取网站www.csdn.net的IP地址,如果存在多个IP地址,要求全部返回
- InetAddress[] address_Arr = InetAddress.getAllByName("www.csdn.net");
- System.out.println("All the IP address about CSDN:");
- for (InetAddress inetAddress : address_Arr) {
- System.out.println(inetAddress.toString());
- }
- // 使用URL类下载深圳大学首页http://www.szu.edu.cn,并统计下载得到网页文件的大小
- URL url = new URL("https://www.szu.edu.cn");
- URLConnection url_connection = url.openConnection();
-
- InputStream in = url_connection.getInputStream();
- FileOutputStream fout = new FileOutputStream("szu_index.html");
- int a = 0;
- while (a > -1) {
- a = in.read();
- fout.write(a);
- }
- fout.close();
- File file = new File("szu_index.html");
- System.out.println("File size:" + file.length() / 1024.00 + "k");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。