简单模拟浏览器的解析功能
来源:互联网 发布:怎么看域名服务器地址 编辑:程序博客网 时间:2024/05/13 16:47
package cn.hncu.url;import java.util.Date;import java.text.SimpleDateFormat;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;import java.net.*;public class HtmlJFrame extends JFrame implements ActionListener, ChangeListener{ private URL urls[]; //URL对象数组 private JComboBox<String> combox; //组合框,输入或选择URL地址 private JTextField text; //文本行,显示文件属性 private JTabbedPane tab; //选项卡窗格,每页显示一个文件 private String charset="GBK"; //字符集名称 public HtmlJFrame() { super("查看指定URL的Web页编辑器及HTML文档"); this.setBounds(150,100,1024,600); this.setDefaultCloseOperation(EXIT_ON_CLOSE); String urls[]={"http://www.phei.com.cn", "http://www.baidu.com", "http://www.google.com", "http://www.sina.com", "file://localhost/D:/Program Files/Java/docs/api/index.html"}; this.combox = new JComboBox<String>(urls); //组合框,显示URL地址 this.combox.setEditable(true); //组合框可编辑 this.getContentPane().add(this.combox,"North"); this.combox.addActionListener(this); //组合框注册单击事件监听器 this.getContentPane().add(this.tab=new JTabbedPane());//选项卡窗格 this.tab.addChangeListener(this); //注册选择事件监听器 this.getContentPane().add(this.text=new JTextField(),"South");//文件属性文本行 this.setVisible(true); this.urls = new URL[20]; //创建URL对象数组 this.combox.setSelectedIndex(0); //选中组合框第1项,触发单击事件,执行actionPerformed()方法 } public void actionPerformed(ActionEvent ev) //组合框选择或单击回车键时触发执行 { String urlname=(String)combox.getSelectedItem(); //获得组合框选中项字符串 int i=tab.getTabCount(); //tab当前页数,即下一页序号 try { this.urls[i] = new URL(urlname); //创建一个URL对象,若文件不存在,抛出异常,则不添加tab页 String filename = this.urls[i].toString(); //URL路径名 for (int j=i-1; j>=0; j--) //在已有页面中查找,不重复打开文件 if(this.tab.getTitleAt(j).equals(filename))//getTitleAt(j)返回tab第j页标题 { this.tab.setSelectedIndex(j); //选中指定tab页,触发ChangeEvent事件 return; } JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); //创建垂直分割窗格 split.setOneTouchExpandable(true); //提供一键展开按钮,快速展开/折叠分隔条 split.setDividerLocation(200); //设置水平分隔条位置 split.add(new JScrollPane(new JEditorPane(this.urls[i])));//创建指定URL的编辑器窗格 JTextArea text_content = new JTextArea(); //文本区,显示源文档 split.add(new JScrollPane(text_content)); this.tab.addTab(filename, split); //tab添加新页,页中添加分割窗格 this.tab.setSelectedIndex(this.tab.getTabCount()-1); //选中tab指定新页,触发ChangeEvent事件 this.readFrom(this.urls[i], this.charset, text_content);//读取url指定文本中的字符串 } catch(MalformedURLException ex) { JOptionPane.showMessageDialog(this, "字符串指定未知协议错误"); } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(this, "\""+urls[i].getFile()+"\"文件不存在"); } catch (IOException ex) { JOptionPane.showMessageDialog(this, "IO错,读取"+urls[i].getFile()+"文件不成功"); } } public void stateChanged(ChangeEvent ev) //当单击选项卡窗格的页标题时触发执行 { //通过文件对象获得文件属性 this.charset="GBK"; //字符集名称 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm"); int i=tab.getSelectedIndex(); String protocol = urls[i].getProtocol(); String str="协议:"+protocol+","; try { if (protocol.equalsIgnoreCase("file")) //FILE协议,比较相等忽略字母大小写 { File file = new File(urls[i].getFile()); //获得文件对象 text.setText(str+"本机:"+InetAddress.getLocalHost().toString()+ ",文件:"+file.getAbsolutePath()+",字符集:"+this.charset+",长度:"+ file.length()+"B,修改日期:"+sdf.format(new Date(file.lastModified()))); } if (protocol.equalsIgnoreCase("http")) //HTTP协议 { URLConnection urlconn = urls[i].openConnection(); String content=urlconn.getContentType(); //获得文件类型,可能包含字符集 int j=content.indexOf("charset="); if (j!=-1) charset=content.substring(j+8); //获得字符集 text.setText(str+"主机:"+urls[i].getHost()+",端口:"+urls[i].getDefaultPort()+ ",IP地址:"+InetAddress.getByName(urls[i].getHost()).getHostAddress()+ ",文件:"+urls[i].getFile()+",长度:"+urlconn.getContentLength()+ "B,类型:"+urlconn.getContentType()+",字符集:"+charset+ ",修改日期:"+sdf.format(new Date(urlconn.getLastModified()))); } } catch(UnknownHostException ex) { JOptionPane.showMessageDialog(this, "找不到指定主机的IP地址"); } catch(IOException ex) { JOptionPane.showMessageDialog(this, "IO错,读取"+this.urls[i].getFile()+"文件不成功"); } } //读取url指定文本中的字符串,添加到text文本区中,charset指定字符集 public void readFrom(URL url, String charset, JTextArea text) throws IOException { InputStreamReader ir = new InputStreamReader(url.openStream(), charset); BufferedReader br = new BufferedReader(ir); //将字节输入流转换成字符输入流,创建字符缓冲输入流 String line = null; while ((line=br.readLine())!=null) //从字符缓冲输入流中读取一行字符串 text.append(line+"\r\n"); br.close(); ir.close(); } public static void main(String args[]) { new HtmlJFrame(); }}
0 0
- 简单模拟浏览器的解析功能
- 模拟浏览器的查找功能
- IOS手机模拟简单的浏览器
- POJ 1028(简单的模拟浏览器)
- 用WebVie实现简单的浏览器功能
- 设置IE与Firefox浏览器的远程DNS解析功能
- 简单的图片浏览器和手势识别的功能实现
- asp简单模拟邮箱功能
- 模拟web服务器简单功能
- 简单模拟Spring IOC功能
- vb制作简单的多窗口浏览器(8)--设置功能
- 非常简单的兼容多浏览器Javascript实现分页功能
- 导出Excel功能-从服务端到浏览器的简单处理
- qtday02 qt做简单的加法器和模拟登陆功能
- JavaScript css3模拟简单的视频弹幕功能
- 模拟浏览器的查找功能(Ctrl+F),同时兼容IE和Chrome
- 模拟浏览器以HTTP请求方式用JUnit4完成功能接口的单元测试
- python爬虫2之简单模拟浏览器
- 文字过长省略
- 必须知道的c++语法知识---19-30
- CSS3滚动条美化效果
- Linux下安装Sublime Text3及其破解
- Android(Java)中的单例
- 简单模拟浏览器的解析功能
- android TV海思方案系统启动流程
- 三通道无人机多光谱相机测试
- Linux下安装sublime汉化版及完美输入中文
- hibernatetools-Update-4.1.1.Final插件安装
- 关于Java中的sleep和wait方法
- 2016 Git 教程 从入门到精通(四)
- nodejs-监控文件目录
- 【编译原理】上下文有关语言-0型语言、1型语言、2型语言、3型语言(校招笔试)