注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

独立观察员·网易

分享万岁

 
 
 

日志

 
 

[Java]利用NIO下载网页  

2013-07-11 22:07:00|  分类: 原新浪博客的 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

[Java]利用NIO下载网页

独立观察员20130711

结合http://www.iteye.com/topic/834447 的例子1和例子2,并修改了一些内容,实现了下载百度首页。

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.nio.ByteBuffer;

import java.nio.channels.FileChannel;

import java.nio.channels.SocketChannel;

import java.nio.charset.Charset;

 

public class BaiduReader {

    private Charset charset = Charset.forName("UTF-8");// 创建XXX(UTF-8)字符集

    private SocketChannel channel;

    String outfile = System.getProperty("user.home") +"\\Desktop\\test.html"; //输出到桌面的相关文件中;

 

    public void readHTMLContent() {

        try {

            InetSocketAddress socketAddress = new InetSocketAddress("www.baidu.com", 80);

            //step1:打开连接

            channel = SocketChannel.open(socketAddress);

 

            //step2:发送请求,使用XXX编码

            channel.write(charset.encode("GET " + "/ HTTP/1.1" + "\r\n\r\n"));

 

            FileOutputStream fout = new FileOutputStream(outfile);// 获取目标文件的输出流;

            FileChannel fcout = fout.getChannel(); // 获取输出通道;

 

            //step3:读取数据

            ByteBuffer buffer = ByteBuffer.allocate(1024);// 创建1024字节的缓冲

            while (channel.read(buffer) != -1) {

                buffer.flip(); // flip方法让缓冲区可以将新读入的数据写入另一个通道(切换读写);

 

                //System.out.println(charset.decode(buffer));// 使用Charset.decode方法将字节转换为字符串;

                fcout.write(buffer);                

                buffer.clear();// 清空缓冲;

                System.out.println("文件已写入到" + outfile);

            }

        } catch (IOException e) {

            System.err.println(e.toString());

        } finally {

            if (channel != null) {

                try {

                    channel.close();

                } catch (IOException e) {

                }

            }

        }

    }

    public static void main(String[] args) {

        new BaiduReader().readHTMLContent();

    }

}

  评论这张
 
阅读(31)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018