Java——获取网页内容并在本地生成HTML文件

使用java.net包下的URL类,可以将一个网页(链接)封装成一个URL对象。 
URL对象有一个openStream()方法,使用该方法可以获取该网页的输入流,我们可以通过读取输入流的方式获得网页的内容,并通过输出流写入HTML文件中。


方式一:

使用此方法需要指定输入流和输出流的字符编码,否则可能会出现乱码

步骤: 
1. 通过URL对象的openStream()方法获得网页的字节输入流 
2. 将字节输入流转换成字符输入流 
3. 为字符输入流加缓冲区 
4. 定义一个字节输出流 
5. 将字节输出流转换成字符输出流 
6. 将读取到的数据写入文件 
7. 关闭流

public void way_1() throws Exception {
    InputStream inputStream;//接收字节输入流
    InputStreamReader inputStreamReader;//将字节输入流转换成字符输入流
    BufferedReader bufferedReader;//为字符输入流加缓冲
    FileOutputStream fileOutputStream;//字节输出流
    OutputStreamWriter outputStreamWriter;//将字节输出流转换成字符输出流

    URL wangyi = new URL("http://www.163.com/");
    inputStream = wangyi.openStream();
    inputStreamReader = new InputStreamReader(inputStream, "gb2312");
    bufferedReader = new BufferedReader(inputStreamReader);
    String s;
    File dest = new File("src/wangyi.html");
    fileOutputStream = new FileOutputStream(dest);
    outputStreamWriter = new OutputStreamWriter(fileOutputStream, "gb2312");
    while ((s = bufferedReader.readLine()) != null) {
        outputStreamWriter.write(s);
    }

    outputStreamWriter.close();
    fileOutputStream.close();
    bufferedReader.close();
    inputStreamReader.close();
    inputStream.close();
}

方式二:

使用此方法不需要指定输入流和输出流的字符编码(因为是通过字节的方式)

步骤: 
1. 通过URL对象的openStream()方法获得网页的字节输入流 
2. 为字节输入流加缓冲 
3. 创建字节输出流对象 
4. 为字节输出流加缓冲 
5. 读取数据,并写入HTML文件 
6. 关闭流

public void way_2() throws Exception{
    File dest = new File("src/wangyi2.html");
    InputStream is;//接收字节输入流
    FileOutputStream fos = new FileOutputStream(dest);//字节输出流

    URL wangyi = new URL("http://www.163.com/");
    is = wangyi.openStream();

    BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲
    BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲

    int length;

    byte[] bytes = new byte[1024*20];
    while((length = bis.read(bytes, 0, bytes.length)) != -1){
        fos.write(bytes, 0, length);
    }

    bos.close();
    fos.close();
    bis.close();
    is.close();
}
 
原文地址:https://www.cnblogs.com/zhuyeshen/p/11435730.html