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


方式一:

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

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

  1. public void way_1() throws Exception {
  2. InputStream inputStream;//接收字节输入流
  3. InputStreamReader inputStreamReader;//将字节输入流转换成字符输入流
  4. BufferedReader bufferedReader;//为字符输入流加缓冲
  5. FileOutputStream fileOutputStream;//字节输出流
  6. OutputStreamWriter outputStreamWriter;//将字节输出流转换成字符输出流
  7. URL wangyi = new URL("http://www.163.com/");
  8. inputStream = wangyi.openStream();
  9. inputStreamReader = new InputStreamReader(inputStream, "gb2312");
  10. bufferedReader = new BufferedReader(inputStreamReader);
  11. String s;
  12. File dest = new File("src/wangyi.html");
  13. fileOutputStream = new FileOutputStream(dest);
  14. outputStreamWriter = new OutputStreamWriter(fileOutputStream, "gb2312");
  15. while ((s = bufferedReader.readLine()) != null) {
  16. outputStreamWriter.write(s);
  17. }
  18. outputStreamWriter.close();
  19. fileOutputStream.close();
  20. bufferedReader.close();
  21. inputStreamReader.close();
  22. inputStream.close();
  23. }

方式二:

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

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

  1. public void way_2() throws Exception{
  2. File dest = new File("src/wangyi2.html");
  3. InputStream is;//接收字节输入流
  4. FileOutputStream fos = new FileOutputStream(dest);//字节输出流
  5. URL wangyi = new URL("http://www.163.com/");
  6. is = wangyi.openStream();
  7. BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲
  8. BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲
  9. int length;
  10. byte[] bytes = new byte[1024*20];
  11. while((length = bis.read(bytes, 0, bytes.length)) != -1){
  12. fos.write(bytes, 0, length);
  13. }
  14. bos.close();
  15. fos.close();
  16. bis.close();
  17. is.close();
  18. }
 

Java——获取网页内容并在本地生成HTML文件的更多相关文章

  1. java获取ubuntu某个目录下的所有文件信息

    java获取ubuntu某个目录下的所有文件信息 public List<VCFile> getAllFiles(String basicDirName) { List<VCFile ...

  2. Java获取路径方法&相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

  3. silverlight 从数据库获取到数据,动态生成XMLWEN文件,并获取文件进行操作

    // Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保 ...

  4. Java获取后台数据,动态生成多行多列复选框

    本例目标: 获取后台数据集合,将集合的某个字段,比如:姓名,以复选框形式显示在HTML页面 应用场景: 获取数据库的人员姓名,将其显示在页面,供多项选择 效果如下: 一.后台 查询数据库,返回List ...

  5. 关于java获取网页内容

    最近项目需求,做一些新闻站点的爬取工作.1.简单的jsoup爬取,静态页面形式: String url="a.atimo.cn";//静态页面链接地址Document doc = ...

  6. java编程如何实现从本地里读取文件1,写入到本地另一个文件2里(多种场景)

    不多说,直接上干货! 有时候,我们需要用到这样的一个场景. ReadLocalFile1WriteLocalFile2.java (以下是相当于复制,读取文件1里的全部内容,并写入到文件2里) pac ...

  7. java实现点击查询数据生成excel文件并下载

    须先导入关键maven包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi& ...

  8. Android NDK 初探,生成so文件以及调用so文件方法

    因为最近业务上涉及安全的问题 然后有一些加密解密的方法和key的存储问题 本来想存储到手机里面,但是网上说一般敏感信息不要存储到手机Sdcard上 而且我这个如果从网络建立通信获取的话,又太耗时,所以 ...

  9. 如何打包/运行jar包,及生成exe文件

    关于如何打包/运行jar包,以及生成exe文件.之前各种查询.博客,终于搞明白究竟是咋回事.记得还做过笔记的.今天要打包生成exe用的时候,居然忘了咋怎来着.去查看之前的笔记,死活没找到(好像被删掉了 ...

随机推荐

  1. MVC拦截

    1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using Syst ...

  2. 理解 BLS 签名算法

    理解 BLS 签名算法 来源 https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716 原文标题 ...

  3. 关于springMVC中的路径问题

    相对路径中,我们最后想要的到的是绝对路径,而绝对路径=参照路径+相对路径: 相对路径往往都知道,只需要区分参照路径即可:对于前台和后台,参照路径不太相同: 什么是前台,后台路径: 前台路径: 出现在 ...

  4. 使用JavaConfig配置SpringMVC

    目录结构 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi ...

  5. 前端有用的CSS属性和JS方法

    1.CSS属性: 透明属性(值越大越不透明): IE:filter:alpha(opacity:30) Google:opacity:0.3 层次属性(值大的会在上面): z-index:100 2. ...

  6. JS JQUERY实现滚动条自动滚到底的方法

    $(function(){ var h = $(document).height()-$(window).height(); $(document).scrollTop(h); }); \ windo ...

  7. JS 数组克隆方法总结(不可更改原数组)

    ES5 方法总结 1.slice let arr = [2,4,434,43]; let arr1= arr.slice();//let arr1 = arr.slice(0); arr[0] = ' ...

  8. iOS静态库转Framework动态库

    参考文章: iOS静态库(.a 和framework)  XCode6制作动态及静态Framework  说说iOS中静态库的开发  dyld: Library not loaded: @rpath/ ...

  9. CentOS7安装rpm包时依赖检测失败,加上--nodeps --force

    安装mysql-community-server的时候,出现依赖检测失败 加上--nodeps --force后可跳过依赖检测,如下

  10. C语言 dlopen dlsym

    C语言加载动态库 头文件:#include<dlfcn.h> void * dlopen(const char* pathName, int mode); 返回值 handle void ...