写得很详细了,注释也详细,就不解释了
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class HTMLContent{
public static void main(String[] args) {
new URLContentDemo();
}
}
class URLContentDemo extends JFrame{
JFrame window;
JTextField url;
JTextArea html;
JButton confirm;
JPanel contentPanel;
//初始化
public URLContentDemo(){
window=new JFrame("HTML Code Viewer");
window.setLayout(null);
window.setSize(800, 800);//设置大小
window.setLocationRelativeTo(null);//设置居中
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置可关闭
window.setLayout(null);//设置绝对布局(窗口里面的内容不会随着窗口的改变而改变)
window.setResizable(false);//设置窗口不可拉伸改变大小
//设置URL标签
JLabel username_label =new JLabel("URL:");
username_label.setFont(new Font("URL:", 1, 30));//设置字体大小
username_label.setBounds(20,20,100,50);//设置位置和大小
window.add(username_label);
//设置URL文本框
url=new JTextField();
url.setFont(new Font("", 0, 20));
url.setBounds(100, 20, 500, 50);
window.add(url);
//设置按钮
confirm=new JButton("Confirm");
confirm.setBounds(650, 20, 100, 50);
//按钮点击事件监听
confirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
html.setText(queryURLContent(url.getText()));
}
});
window.add(confirm);
//设置HTML文本框
html=new JTextArea ();
html.setLineWrap(true);//自动换行
html.setWrapStyleWord(true);//自动适配每行字体
html.setEditable(false);//不可编辑
html.setFont(new Font("", 0, 20));//文本域内字体大小
html.setBackground(new Color(244, 244, 244));//文本域背景
//设置文本域滚动效果
JScrollPane scrollpane=new JScrollPane(html);
scrollpane.setBounds(20, 100, 750, 600);
scrollpane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
window.add(scrollpane);
window.setVisible(true);//设置面板可见
}
public String queryURLContent(String urlStr) {
if(null == urlStr || "".equals(urlStr)) {
JOptionPane.showMessageDialog(null, "请输入URL地址", "URL输入错误", JOptionPane.ERROR_MESSAGE);
return "";
}
if(!verifyUrl(urlStr)) {
JOptionPane.showMessageDialog(null, "请输入正确的URL地址", "URL格式错误", JOptionPane.ERROR_MESSAGE);
return "";
}
StringBuilder sb = null;
boolean isConnection = false;
try {
//创建一个URL实例
URL url = new URL(urlStr);
sb = new StringBuilder();
try {
//检测当前输入URL是否是可用链接
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("HEAD");
isConnection = con.getResponseCode() == HttpURLConnection.HTTP_OK;
}catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "该URL不存在:【UnknownHostException】", "URL异常提示", JOptionPane.ERROR_MESSAGE);
}
if (isConnection) {
try {
//通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is,"utf-8");
//为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();//读取数据
while (data!=null){//循环读取数据
sb.append(data);//输出数据
data = br.readLine();
}
br.close();
isr.close();
is.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "URL内容获取失败:【IOException】", "URL异常提示", JOptionPane.ERROR_MESSAGE);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "URL链接转换失败:【MalformedURLException】", "URL异常提示", JOptionPane.ERROR_MESSAGE);
}
return sb.toString();
}
/**
* 验证是否是URL
* @param url
* @return
*/
public static boolean verifyUrl(String url){
String regEx ="[a-zA-z]+://[^\\s]*";
//忽略大小写
Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
boolean rs = matcher.matches();
return rs;
}
}