java URL类

it2026-09-22  2

我们可以使用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();
最新回复(0)