标签:
本例只能用于查看比较简单的网页,像是现在jsp开发的网页有很多地方时无法显示的,但这种程序还是值得学习一下的
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 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(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(); } }
在界面的最上侧输入需要查询的网址即可,如下:
Java之------socket查看指定URL的Web页编辑器及HTML文档
标签:
原文地址:http://blog.csdn.net/x121850182/article/details/51346101