java URL类

我们可以使用Socket类(SSLSocket类)发送http(https)请求的程序,但是如果网页指向的是一个文件或者资源,用Socket是无法完成网页下载任务的,但我们可以使用URL类来下载网页指定的资源。

在java.net包中定义了URL类,该类用来处理有关URL的内容。URL类需要参数String完成URL实例化,这里的address格式应满足URL的格式:为protocol://资源地址

  • protocol可以是HTTP、HTTPS、FTP 和 File
  • 资源地址中可以带有端口号及查询参数。

URL类中封装有一个InputStream返回类型的openStream()方法,我们的程序就可以读取这些字节输入流来获得对应内容。

输出到console测试

	String address = "https://www.baidu.com";
        try {
            URL url = new URL(address);
            System.out.printf("连接%s成功!", address);
            //获得url的字节流输入
            InputStream in = url.openStream();
            //装饰成字符输入流
            br = new BufferedReader(new InputStreamReader(in, "utf-8"));
        } catch (IOException e) {
            System.out.println("Invalid url!");
            e.printStackTrace();
        }
        new Thread(() -> {
            String message = null;
            do {
                try {
                    message = br.readLine();
                    System.out.println(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } while (message != null);

            System.out.println("The dialog has been closed");

        }).start();

保存到文件核心代码:

	File saveFile = new File(fileName);
	FileOutputStream fileOut = new FileOutputStream(saveFile);//新建本地空文件
 	byte[] buf = new byte[1024]; // 用来缓存接收的字节数据
 	//获得url的字节流输入
	URL url = new URL(address);
	InputStream in = url.openStream();
	int size = 0;
     while ((size = in.read(buf)) != -1) { //读一块到缓存,读取结束返回-1 读取字节流保存到buf中
		fileOut.write(buf, 0, size); //写一块到文件
	}
	fileOut.flush();//关闭前将缓存的数据全部推出
    //文件传输完毕,关闭流
    fileOut.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值