Java学习记录 URL

URL

URL(Uniform Resource Locator),表示Internet上的资源地址。用户可通过URL进行访问网络资源。一般浏览器会对网络资源进行相应的解析 或 查找相应的文件 和 资源

示例:

protocol://resourceName

protocol: 协议名,指定获取资源使用的传输协议(如:HTTP、FTP、FILE等)
resourceName: 资源名,指定资源的完整地址,有 主机名、端口号、文件名、文件内部引用等。

示例:

http://www.baidu.com/ (协议名://主机名)

http://localhost:8080/Test/admin/login.jsp (协议名://机器名: 端口号/文件名

URL

Class URL

java.lang.Object
java.net.URL

java.net包 是专门处理 URL的类 ULR

构造方法 (更多自行AIP)

URL(String spec)
URL(String protocol , String host , int port , String file)
URL(String protocol , String host , String file)

spec: URL地址
protocol: 协议名称
host: 主机名称
port: 主机端口号
file: 主机上的文件

方法 (更多自行AIP)

返回 方法 说明
String getFile() 获取 URL路径和文件名
URLConnection openConnection() 获取 通信连接对象
InputStream openStream() 获取 读取URL的字节输入流

URLConnection

Class URLConnection

java.lang.Object
java.net.URLConnection

URLConnection对象 是通过 URL对象 获取的通信连接

URLConnection(URL url) 构造方法也可以实现通信连接

方法 (更多自行AIP)

返回 方法 说明
void setDoInput(boolean input) 是否进行 URL连接输入
void setDoOutput(boolean output) 是否进行 URL连接输出
void setRequestProperty(String key , String value) 设置键值对指定的常规请求属性(密钥已存在,则旧值被覆盖)
InputStream getInputStream() 获取 URL输入流,读取资源
OutputStream getOutputStream() 获取 URL输出流,输出资源
int getContentLength() 获取 URL资源长度
int getResponseCode() 获取 URL响应状态码(如:404)

HttpURLConnection

Class HttpURLConnection

java.lang.Object
java.net.URLConnection
java.net.HttpURLConnection

HttpURLConnection支持 HTTP\HTTPS协议 ,可以将URLConnection强制转换HttpURLConnection

HttpURLConnection (URL url) 构造方法也可以实现通信连接

方法 (更多自行AIP)

返回 方法 说明
void setRequestMethod(String method) 设置 URL请求方法(GET、POST、…。默认GET(必须大写))
int getResponseCode() 从HTTP响应消息获取状态代码
String getRequestMethod() 获取请求方法

编码

在开发中,有时是需要中文转码,保证传输不会出现乱码的情况,常用的有URLEncodeURLDecode

URLEncoder类

将普通字符串转换成 application/x-www-from-urlencoded 字符串

1.字符a-zA-Z0-9.-*_ 都不会被编码

2.将空格转换为加号 (+)

3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值

4.在每个 name=value 对之间放置 & 符号

示例:

//字符串中的非英文字符的内容,会被转化成%XX%XX XX 为十六进制的数字
String urlString = URLEncoder.encode("你好" , "UTF-8");
System.out.println(urlString);
//输出:%E4%BD%A0%E5%A5%BD

URLDecoder类

将 application/x-www-from-urlencoded 字符串转换成普通字符串。它与 URLEncoder类 是互为反向转换的过程(可以理解成 序列化与反序列化 的操作)

示例:

String keyWord = URLDecoder.decode("%E4%BD%A0%E5%A5%BD" , "UTF-8");
System.out.println(keyWord);
//输出:你好

代码示例

下载器

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

/**
 * @Author: 柏竹
 * @Description: 一个简洁主义...
 * @Date_Created_in: 2021-03-01 23:40
 * @Modified_By:
 * @Project: 下载器
 */
public class Demo {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //https://qd.myapp.com/myapp/qqteam/pcqq/PCQQ2020.exe
        System.out.println("下载器");
        System.out.print("输入地址: ");
        String address = new Scanner(System.in).nextLine();
        URL url  = new URL(address);
        //获取 文件名称
        String name = url.getFile();
        /* name =  /myapp/qqteam/pcqq/PCQQ2020.exe */
        System.out.println("1 : "+name);
        //最后一次出现的索引 ‘/’下标 + 1 开始
        name = name.substring(name.lastIndexOf("/")+1);
        /* name = PCQQ2020.exe */
        System.out.println("2 : "+name);
        //进行url连接
        URLConnection conn = url.openConnection();
        //连接url对象的总长度(字节数
        long length = conn.getContentLengthLong();
        // 获取 输入流 的资源
        InputStream is = conn.getInputStream();
        //下载 目的 的位置
        File file = new File("D:\\IDM\\"+name);
        FileOutputStream fos = new FileOutputStream(file);
        
        //以下是执行下载
        int len = -1;
        // 每次对两字节
        byte[] bytes = new byte[1024 * 1024];
        int sum = 0;
        while(true){
    
    
            len = is.read(bytes);
            if(len == -1){
    
    
                break;
            }
            fos.write(bytes , 0 , len);
            sum += len;
            //通过文件 进度长 与 总长 的百分比进行算出下载进度
            System.out.println("正在下载:"+sum/(length/100)+"%");
        }
    
        System.out.println("下载成功!!!");
        is.close();
        fos.close();
    }
}

捕捉网页

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * @Author: 柏竹
 * @Description: 一个简洁主义...
 * @Date_Created_in: 2021-03-02 0:17
 * @Modified_By:
 * @Project:
 */
public class Demo {
    
    
    public static void main(String[] args) throws Exception {
    
    
    
        System.out.println("网站捕捉");
        System.out.print("输入地址: ");
        String address = new Scanner(System.in).nextLine();
        URL url = new URL(address);
        URLConnection conn = url.openConnection();
        InputStream is = conn.getInputStream();
        File file = new File("D://IDM//"+"index.html");
    
        //字节流 -> 缓存字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(is , StandardCharsets.UTF_8));
        //文件字节流 -> 缓存字符流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
        String line = null;
        
        while (true){
    
    
            line = br.readLine();
            if (line == null){
    
    
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        System.out.println("网站捕捉完成!");
        
        br.close();
        bw.close();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45963193/article/details/114278799
今日推荐