一: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文件,这是百度网站给你发的响应,同时编译器会输出当前网页的详细信息