• 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();
    }
     
  • 相关阅读:
    玩游戏(dfs)
    Find them, Catch them(并查集)
    Shredding Company(dfs)
    Sudoku(dfs)
    Network Saboteur(dfs)
    棋盘问题(dfs)
    Curling 2.0(dfs)
    A Knight's Journey(dfs)
    15. 3Sum
    12. Integer to Roman
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11435730.html
Copyright © 2020-2023  润新知