java URL编程:统一资源定位符
- 统一资源定位符,它表示 Internet 上某一资源的地址。通过 URL 我们可以访问 Internet 上的各种网络资源,可以通过URL的对象调用其相应的方法将资源读取(“下载”)。整个过程类似网络爬虫。
- 我网络爬虫的URL也是采用这个方法。
下面是URL的方法:
public String getProtocol( ) 获取该URL的协议名
public String getHost( ) 获取该URL的主机名
public String getPort( ) 获取该URL的端口号
public String getPath( ) 获取该URL的文件路径
public String getFile( ) 获取该URL的文件名
public String getRef( ) 获取该URL在文件中的相对位置
public String getQuery( ) 获取该URL的查询名
下面的代码是对一个网站的网络爬虫,是获取了源代码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
//url:统一资源定位符,一个URL对象对应一个互联网上的资源
//可以通过URL的对象调用其相应的方法将资源读取(“下载”)
public class TestURL {
public static void main(String[] args) throws Exception {
String charset = "UTF-8";
//1.创建一个URL的对象
// URL url = new URL("http://127.0.0.1:81/helloworld.txt");//File file = new File("文件的位置")
URL url = new URL("http://tech.ifeng.com/");
System.out.println("*******");
System.out.println(url.getProtocol());
System.out.println(url.getHost());
System.out.println(url.getPort());
System.out.println(url.getFile());
System.out.println(url.getRef());
System.out.println(url.getQuery());
//如何将服务端的资源获读取进来
//openStream() InputStream输入流
InputStream is = url.openStream();
// byte[] b = new byte[20];
// int len;
// while((len = is.read(b))!= -1){
// String str = new String(b,0,len);
// System.out.println(str);
// }
// is.close();
String line = "";
StringBuffer buffer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(is,charset));
while((line = reader.readLine()) != null){
buffer.append(line).append("\n");
}
System.out.println(buffer.toString());
//如果既有数据的输入又有数据的输出,则考虑使用URLConnection
URLConnection urlConn = url.openConnection();
InputStream is1 = urlConn.getInputStream();
// FileOutputStream fos = new FileOutputStream(new File("abc.txt"));
FileWriter fw = new FileWriter("ifeng.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(buffer.toString());
bw.close();
fw.close();
// byte[] b1 = new byte[20];
// int len1;
// while((len1 = is1.read(b1))!= -1){
// fos.write(b1, 0, len1);
// }
// fos.close();
// is1.close();
}
}