使用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();
}
 

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_第一章后入门_第一遍_控制器和视图

    在掌握了数据库访问方法之后,我们来看几个mvc的入门程序,借此熟悉mvc的常见工作方式. 一.创建项目,显示一个最简单的页面. 要点:1.为了突出重点,不使用模版:2.项目类型为mvc,便于获得vs添 ...

  2. Java自学-接口与继承 重写

    Java 重写方法 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写 又叫覆盖 Override 步骤 1 : 父类Item 父类Item有一个方法,叫做effect packa ...

  3. 2年java,蚂蚁一面,卒

    其实我一个都没答上来.并不是因为我笨,是因为我不会.在大扰的帮助下,现在我会了,求求你再给我一个机会. TreeSet/HashSet 区别 顾名思义,首先是结构上的不同 1.TreeSet背后的结构 ...

  4. Django:RestFramework之-------路由

    11.路由 路由设置: url(r'^(?P<version>[v1|v2]+)/vview\.(?P<format>\w+)$', views.VView.as_view({ ...

  5. JavaScript 变量与注释

    一.变量 ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据. 换句话说,每个变量仅仅是一个用于保存值的占位符而已.定义变量时要使用 var 操作符(注意 var 是 ...

  6. 没有用到React,为什么我需要import引入React?

    没有用到React,为什么我需要import引入React? 本质上来说JSX是React.createElement(component, props, ...children)方法的语法糖. 所以 ...

  7. IOS基础:Objective-C 字符串处理

    //一.NSString/*----------------创建字符串的方法----------------*/ //1.创建常量字符串.NSString *astring = @"This ...

  8. Go语言入门——函数

    写了快一个月的Go,已经没有什么陌生感了. 一行代码写完,不会在行尾本能的敲上“:”,直接Enter键换行: 定义变量把变量名放在前面,类型放在后面: 使用struct去定义自己想要的数据模型就好比定 ...

  9. php fsockopen()方法,简化,异步非阻塞调用

    介绍在项目中遇到一个问题,就是php是同步的读取下来的,如果一个方法请求的时间长了一点, 那么整个程序走下去将会遇到阻塞,现在我想触发这个方法,但是又不影响我下下面的程序正常的走下去.查了一上午的方法 ...

  10. 使用Matplotlab画图

    1.绘制折线图 #! /usr/bin/env python#encoding=utf-8 # 用于python2import sys reload(sys) sys.setdefaultencodi ...