全网超级详细的关于Java当中URL的网络连接

一:Java中应用URL最基础的方法(了解即可)

getProtocol();//获取URL的协议部分
getHost();//获取URL的主机名
getFile();//获取URL的文件路径
getPort();//获取URL的端口号
getRef();//获取URL的引用

下面一段代码学会

public void runOne(){//1 应用URL最基础的方法
        try {
            URL myURL = new URL("http://java.sun.com");
            String protocal = myURL.getProtocol();//调用myURL对象的getProtocol()方法,我们获取URL的协议部分(在这个例子中是"http")
            String host = myURL.getHost();//调用getHost()方法获取URL的主机名(在这个例子中是"java.sun.com")
            String file = myURL.getFile();//调用getFile()方法获取URL的文件路径(在这个例子中是"/",因为URL没有指定特定的文件或路径)
            int port = myURL.getPort();//调用getPort()方法获取URL的端口号。如果URL中没有明确指定端口号(例如,HTTP默认端口是80),那么getPort()将返回-1
            String ref = myURL.getRef();//调用getRef()方法获取URL的引用(通常是URL中的“#”后面的部分)。如果URL中没有引用,此方法将返回null

            System.out.println(protocal + ", " + host + ", " + file + ", " + port + ", " + ref);
            //结果  http, java.sun.com, , -1, null
        }catch (MalformedURLException e){//创建URL需要try catch交给MalformedURLException(IDEA会提示)
            e.printStackTrace();
        }
    }

输出结果为

http, java.sun.com, , -1, null

二:用URLConnection类下载图片

学会URLConnection可以通过Java代码下载网页图片,源代码或者text文档了

URLConnection conn = url.openConnection();//建立URLConnection连接

 下面一段代码学会对URLConnection的使用

public void runTwo(){//URLConnection这段代码的主要目的是尝试从一个URL获取数据并将其保存为一个本地文件。
        try {
            //网上随便找的一个图片资源
            URL url = new URL("https://alifei03.cfp.cn/creative/vcg/veer/1600water/veer-128524042.jpg");
// 打开连接
            URLConnection conn = url.openConnection();
// 尝试获取URL连接的输入流,用于读取数据,打开到该URL的连接。这会返回一个URLConnection对象,该对象可以用于获取输入流以读取URL的内容。
//            这个对象可以用来设置各种连接参数,比如请求方法(GET、POST等)、请求头、读取超时、连接超时等
            InputStream is = conn.getInputStream();
            //InputStream in = url.openStream();//这种方法则更为简洁。它直接通过openStream()方法获取输入流来读取URL的数据,没有中间步骤。这种方法没有提供额外的配置选项,它使用默认的连接参数。
// 关于IO流的用法和写法一定要熟悉
            //创建一个输出流,用于将数据写入到本地文件d:\baidu.png
            OutputStream os = new FileOutputStream("d:\\URL.jpg");
// 创建一个字节数组作为缓冲区,用于存储从输入流读取的数据
        byte[] buffer = new byte[2048];
// 初始化一个变量,用于存储每次从输入流读取的字节数
            int length = 0;
            // 循环读取输入流中的数据,直到读取到流的末尾(返回-1)
        while (-1 != (length = is.read(buffer, 0, buffer.length))) {//循环会不断从输入流is中读取数据,直到没有更多数据可读。is.read(buffer, 0, buffer.length)这个方法尝试读取最多buffer.length(在这个例子中是2048字节)的数据到buffer数组中,从数组的索引0开始。它返回实际读取的字节数,如果已经到达流的末尾,则返回-1
            // 将读取到的数据写入输出流
            os.write(buffer, 0, length);
        }
        is.close();
        os.close();
        }catch (IOException e){//IOException 比MalformedURLException更通用
            e.printStackTrace();
        }
    }

运行完成打开D盘当中有一个URL.jpg的图片说明运行成功

你可以对URL的路径,本地文件名(以及后缀)修改获得不同资源下的不同文件

三:通过使用HttpURLConnection获取网站信息

重点代码

URLConnection conn = url.openConnection();
HttpURLConnection hc = (HttpURLConnection) conn;

一段代码学会HttpURLConnection

public void RunThree(){//获取服务器HTTP响应消息,学习HttpURLConnection以及相关方法//HttpURLConnection可以获取更多信息
        try {
            URL url = new URL("http://www.baidu.com");	//  创建Url对象
// 得到URLConnection连接对象
            URLConnection conn = url.openConnection();
//将通用的URLConnection对象强制转换为HttpURLConnection对象。这是必要的,因为HttpURLConnection提供了更多的方法和属性,用于获取和处理HTTP请求和响应。
            HttpURLConnection hc = (HttpURLConnection) conn;
// 获得响应消息头
            InputStream inputStream = hc.getInputStream();
            OutputStream outputStream=new FileOutputStream("D:\\baidu.text");
            byte[] buffer=new byte[2048];
            int length=0;
            while (-1 != (length = inputStream.read(buffer, 0, buffer.length))) {//循环会不断从输入流is中读取数据,直到没有更多数据可读。is.read(buffer, 0, buffer.length)这个方法尝试读取最多buffer.length(在这个例子中是2048字节)的数据到buffer数组中,从数组的索引0开始。它返回实际读取的字节数,如果已经到达流的末尾,则返回-1
                // 将读取到的数据写入输出流
                outputStream.write(buffer, 0, length);
            }
            System.out.println(conn.getContentType());//获取响应的MIME类型,例如text/html或image/png
            System.out.println(conn.getContentLength());//获取响应体的长度(以字节为单位)。注意,如果响应是动态生成的或者长度未知,这可能会返回-1
            System.out.println(conn.getContentEncoding());//获取响应内容的编码方式,例如gzip或deflate
// 获得HTTP消息状态码
            System.out.println(hc.getResponseCode());//获取HTTP响应的状态码,例如200表示成功,404表示未找到资源。
            System.out.println(hc.getResponseMessage());//获取与状态码对应的HTTP状态消息,例如"OK"或"Not Found"。
// 获得HTTP响应消息主体
            hc.getContent();//获取响应的主体内容。这通常是一个InputStream,你可以从中读取响应的数据。注意,这个操作可能会消耗大量的时间和资源,特别是当响应体很大时
            inputStream.close();
            outputStream.close();
        }catch (IOException e){
            e.printStackTrace();
        }

    }

运行完毕你会发现自己的D盘当中会有一个百度的text文件,这是百度网站给你发的响应,同时编译器会输出当前网页的详细信息

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值