第83题JAVA高级技术-网络编程2(解析网页中的内容)
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第83题JAVA高级技术-网络编程2(解析网页中的内容)相关的知识,希望对你有一定的参考价值。
回城传送–》《JAVA筑基100例》
文章目录
零、前言
今天是学习 JAVA语言 打卡的第83天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。
因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。
学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。
我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 JAVA语言 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
一、题目描述
题目实现:做一个解析指定网址的网页内容小应用。
二、解题思路
创建一个类:InternetContentFrame,继承JFrame窗体类。
定义一个getURLCollection()方法:用于解析网页内容
使用URLConnection类的getInputStream()方法 获取网页资源的输入流对象。
三、代码详解
InternetContentFrame
package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* Description:
*
* @author xiaoxuzhu
* @version 1.0
*
* <pre>
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/23.1 xiaoxuzhu 2022/5/23 Create
* </pre>
* @date 2022/5/23
*/
public class InternetContentFrame extends JFrame
private JTextArea ta_content;
private JTextField tf_address;
/**
* Launch the application
* @param args
*/
public static void main(String args[])
EventQueue.invokeLater(new Runnable()
public void run()
try
InternetContentFrame frame = new InternetContentFrame();
frame.setVisible(true);
catch (Exception e)
e.printStackTrace();
);
/**
* Create the frame
*/
public InternetContentFrame()
super();
setTitle("解析网页中的内容");
setBounds(100, 100, 484, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.NORTH);
final JLabel label = new JLabel();
label.setText("输入网址:");
panel.add(label);
tf_address = new JTextField();
tf_address.setPreferredSize(new Dimension(260,25));
panel.add(tf_address);
final JButton button = new JButton();
button.addActionListener(new ActionListener()
public void actionPerformed(final ActionEvent e)
String address = tf_address.getText().trim();// 获得输入的网址
Collection urlCollection = getURLCollection(address);// 调用方法,获得网页内容的集合对象
Iterator it = urlCollection.iterator(); // 获得集合的迭代器对象
while(it.hasNext())
ta_content.append((String)it.next()+"\\n"); // 在文本域中显示解析的内容
);
button.setText("解析网页");
panel.add(button);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
ta_content = new JTextArea();
ta_content.setFont(new Font("", Font.BOLD, 14));
scrollPane.setViewportView(ta_content);
//
public Collection<String> getURLCollection(String urlString)
URL url = null; // 声明URL
URLConnection conn = null; // 声明URLConnection
Collection<String> urlCollection = new ArrayList<String>(); // 创建集合对象
try
url = new URL(urlString); // 创建URL对象
conn = url.openConnection(); // 获得连接对象
conn.connect(); // 打开到url引用资源的通信链接
InputStream is = conn.getInputStream(); // 获取流对象
InputStreamReader in = new InputStreamReader(is,"UTF-8"); // 转换为字符流
BufferedReader br = new BufferedReader(in); // 创建缓冲流对象
String nextLine = br.readLine(); // 读取信息,解析网页
while (nextLine !=null)
urlCollection.add(nextLine); // 解析网页的全部内容,添加到集合中
nextLine = br.readLine(); // 读取信息,解析网页
catch(Exception ex)
ex.printStackTrace();
return urlCollection;
解析结果:
四、推荐专栏
五、示例源码下载
关注下面的公众号,回复筑基+题目号
筑基83
以上是关于第83题JAVA高级技术-网络编程2(解析网页中的内容)的主要内容,如果未能解决你的问题,请参考以下文章
第88题JAVA高级技术-网络编程7(简易聊天室2:运行客户端,连接服务器)
第88题JAVA高级技术-网络编程7(简易聊天室2:运行客户端,连接服务器)