如何增加访问量、阅读量(3.0)

这个3.0版本挺早之前就写好,一直都比较忙,没有空写博客。这次把程序做成了图形界面类型,并可以根据自己的需求选择访问哪几篇博客或者是全部访问,然后是可以选择是否随机访问

 

这是2.0版本的链接:如何增加访问量、阅读量(2.0版)_秀得一脸的博客-CSDN博客

我的图形界面是用Eclipse的插件WindowBuilder写的,这是下载安装WindowBuilder的教程链接:Eclipse之WindowBuilder的安装和使用(最新)_秀得一脸的博客-CSDN博客_eclipsewindowbuilder使用

下面是一些运行图片:

总页面:

抓取的页面信息:

匹配的网址信息:

github下载地址(代码下载):https://github.com/LGSKOKO/java-Daily-small-program

这个程序是完全可以运行使用的,只是有一些小细节没有完善,以后有时间在完善吧!

代码如下:

DesktopTest4.java

package views;

//import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
//import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;

public class DesktopTest4 {


	public ArrayList<String> strList = new ArrayList<String>();//定义一个String类型的泛型集合
	public int count = 0;	//定义一个变量  用来记录你一共有多少条博文网址
	public int num =0;		//定义一个变量 用来记录你现在完成了第几遍便利
	public int i=0;
	public Random random = new Random();
	private Gui gui;

	public void setGui(Gui gui) {
		this.gui = gui;
	}

	/*
	 * 调用此方法通过正则表达式进行匹配
	 * 匹配有效的博文网址
	 */
	public void match(){
		
		try {
			
			FileReader fr = new FileReader("match.txt");
			BufferedReader br = new BufferedReader(fr);
			String str = "";
			
		    while((str = br.readLine())!= null){
		    	strList.add(str);
		    	count++;
					
				}
			 fr.close();
			 br.close();
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/*
	 * 通过此方法达成打开相应网址的效果
	 */
	public  void browse(String uri){
		
		try {
			URL url = new URL(uri);
			InputStream is =url.openStream();
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	/*
	 * 此方法为进行无限循环
	 * 并定时休眠线程
	 */
	public  void begin(int j1,Boolean b) {
		match();
		//如果为真则采用随机访问,否则全部遍历
		if(b) {
			random(j1);
			
		}else {
			all(j1);
		}
		

	}
	
	/*
	 * 此方法为全部遍历方法
	 */
	public void all(int j2) {
		while(true){
			
			try{
				if(i<count)
				{
					//int hhh = random.nextInt(3);	
					for(int k=0; k<j2;k++)
					  browse((String)strList.get(k));
					Thread.sleep(40000);//这里的单位是毫秒  打开每个博文网址间隔多少ms
					System.out.println("完成第"+i+"个for循环");
					
				}else{
					i=-1;
					num++;
					System.out.println("完成第"+num+"轮访问");
					
					// Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
					Thread.sleep(60000);//这里的单位是毫秒  完成每次总的博文遍历间隔多少ms
				}				
			}catch(Exception e){
				e.printStackTrace();
			}
			i++;
		}
	}
	
	public void random(int j2) {
		while(true){
			
			try{
				if(i<count)
				{
					
					for(int k=0; k<j2;k++)
					{
						int hhh = random.nextInt(j2);
						browse((String)strList.get(hhh));
					}
					Thread.sleep(40000);//这里的单位是毫秒  打开每个博文网址间隔多少ms
					System.out.println("完成第"+i+"个for循环");
					
				}else{
					i=-1;
					num++;
					System.out.println("完成第"+num+"轮访问");
					// Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
					Thread.sleep(60000);//这里的单位是毫秒  完成每次总的博文遍历间隔多少ms
				}				
			}catch(Exception e){
				e.printStackTrace();
			}
			i++;
		}
	}
	
	

}

Gui.java:

package views;


import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import javax.swing.JRadioButton;
import javax.swing.JButton;

public class Gui extends JFrame  implements ActionListener {

	private JPanel contentPane;
	private JTextField textField;//记录博客网址
	private JTextField textField_1;//记录访问篇数
	private JRadioButton radioButton;//单选按钮,记录是否随机访问
	private JButton start;//开始按钮			
	private JButton stop;
	private DesktopTest4 dt;
	


	public void setDt(DesktopTest4 dt) {
		this.dt = dt;
	}

	/**
	 * Create the frame.
	 */
	public Gui() {
		setForeground(Color.RED);
		setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\hhh\u674E\u5148\u751F\\Desktop\\E74CE3A3F6CFF53C768BC6B63980BBCC.jpg"));
		setTitle("刷博客访问量、阅读量小程序");
		
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new GridLayout(2,1));
		
		JPanel panel = new JPanel();
		contentPane.add(panel);
		panel.setLayout(new GridLayout(3,1));
		
		JPanel panel_2 = new JPanel();
		panel.add(panel_2);
		
		JLabel label = new JLabel("\u535A\u5BA2\u7F51\u5740\uFF1A");
		panel_2.add(label);
		
		textField = new JTextField();
		panel_2.add(textField);
		textField.setColumns(30);
		
		JPanel panel_3 = new JPanel();
		panel.add(panel_3);
		
		JLabel label_1 = new JLabel("\u8BBF\u95EE\u7BC7\u6570\uFF1A");
		panel_3.add(label_1);
		
		textField_1 = new JTextField();
		panel_3.add(textField_1);
		textField_1.setColumns(10);
		
		JPanel panel_4 = new JPanel();
		panel.add(panel_4);
		
		JLabel label_2 = new JLabel("\u662F\u5426\u968F\u673A:");
		panel_4.add(label_2);
		
		 radioButton = new JRadioButton("\u968F\u673A\u8BBF\u95EE");
		panel_4.add(radioButton);
		
		JPanel panel2 = new JPanel();
		contentPane.add(panel2);
		panel2.setLayout(new GridLayout(1,2));
		
		JPanel panel_1 = new JPanel();
		panel2.add(panel_1);
		
		start = new JButton("\u5F00\u59CB");//开始按钮
		panel_1.add(start);
		start.addActionListener(this);
		
		stop = new JButton("\u7ED3\u675F");//结束按钮
		stop.setEnabled(false);
		panel_1.add(stop);
		stop.addActionListener(this);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);						    //如果没这句代码,图形就无法显示
	}
	
	// 监听按钮
	public void actionPerformed(ActionEvent e) {
		//判断按钮信息来源
		if(e.getSource()== start){
			
			String str = textField.getText();
			Url url = new Url();
			url.openUrl(str);
			Match match = new Match();
			match.compare();
			int j =Integer.parseInt(textField_1.getText());//获取访问篇数
			Boolean b = false;
			if(radioButton.isSelected())				//判断单选按钮是否选中
				b =true;
			dt.begin(j,b);
			start.setEnabled(false);
			stop.setEnabled(true);
		}else if(e.getSource() == stop) {
			stop.setEnabled(false);
			start.setEnabled(true);
			
		}
		
	}

}

Match.java:

package views;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Match {

	public void compare(){
	
		try {
			FileReader fr = new FileReader("url.txt");//读取已经抓取的页面信息文件
			BufferedReader br = new BufferedReader(fr);
			
			FileWriter fw = new FileWriter("match.txt");//此文件用力存放有效的博文网址的文件
			BufferedWriter bw = new BufferedWriter(fw);
			
			String str ="";
			String readStr="";
			//编写正则表达式
			String regex="https://blog.csdn.net/\\w{1,}\\_\\d{1,}/article/details/\\d{1,}";
			
			Pattern p =  Pattern.compile(regex);//设置正则规则 不会可以查看Pattern和Matcher这两个类
			while(( readStr=br.readLine())!= null)
			{
				
				Matcher m = p.matcher(readStr);//进行匹配
				 while (m.find()){
					 if(!str.contains(m.group()))
					 {
						 str +=m.group();
		                 str+="\r\n";
					 } 
	               }
			
			}
			bw.write(str);
			bw.flush();//因为使用的是缓冲字符流,最好加上这句话 否则如果缓存区未满不会将信息写到文件中
			//这也就是为什么有的人会问为什么我的信息没成功写入文件中
			
			fr.close();
			br.close();
			fw.close();
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	

}

start.java:

package views;

public class Start {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Gui gui = new Gui();
		DesktopTest4 dt = new DesktopTest4();
		gui.setDt(dt);
		dt.setGui(gui);
	}

}

url.java:

package views;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;



public class Url {
	
 public void openUrl(String str)
 {
	 try {
		URL myUrl = new URL(str);//打开指定网址
		
		InputStreamReader is =new InputStreamReader( myUrl.openStream(),"utf-8");
		//myUrl.openStream()是打开与此URL的连接,并返回一个InputStream以从该连接读取
		// API文档说明:InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。
		BufferedReader br = new BufferedReader(is);//将inputStramReader转化为BufferReader
		
		FileWriter fw = new FileWriter("url.txt");
		BufferedWriter bw = new BufferedWriter(fw);
		
		
		String str1 ="";
		String str2="";
		while((str1=br.readLine())!= null)
		{
			str2+=str1;
			str2+="\r\n";
			
		}
		
		bw.write(str2);
		bw.flush();//因为使用的是缓冲字符流,最好加上这句话 否则如果缓存区未满不会将信息写到文件中
		//这也就是为什么有的人会问为什么我的信息没成功写入文件中
		
		is.close();
		br.close();
		fw.close();
		bw.close();
		
	} catch (MalformedURLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
 }
 
   

}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Foxit Reader(福昕阅读器)是一款免费的PDF文档阅读器和打印器,具有令人难以置信的小巧体积、快捷的启动速度和丰富的功能。新版本支持Windows Me/2000/XP/2003/Vista操作系统,其核心技术与PDF标准版1.7完全兼容。   在没有Foxit Reader(福昕阅读器)以前,为了能够打开显示PDF文档,您可能需要从别家公司下载一个庞大的PDF阅读器,等待漫长的安装过程,忍受恼人的启动画面。如果您想进一步对PDF文档进行批注,您还得支付至少299美元购买其它软件才能获得批注功能。   现在有了Foxit Reader(福昕阅读器),您不必再忍受这些烦恼了。因为福昕阅读器带来了非常突出的优势,功能简单实用方便,极大地提升了用户体验。   Foxit Reader(福昕阅读器)特点突出表现在:   1)难以置信的小巧体积:体积小巧,仅占Acrobat Reader 20兆容的一小部分。   2)快捷的启动速度:瞬间就可启动福昕阅读3.0,完全没有那些恼人的公司LOGO和作者名称的启动画面。   3)批注工具:当您阅读PDF文档,是否曾想过对文档进行批注呢?有了Foxit Reader,您完全可以在文档上画图、高亮文本、输入文字,并且对批注的文档进行打印或保存。   4)文本转换器:将整份PDF文档转换为文本文件。   5)高度安全性和隐私性:Foxit Reader 高度尊重用户的安全性和隐私性,没有用户的许可不会主动访问互联网。而别的Reader却会在用户不知晓的情况下,主动从后台连接到互联网。Foxit Reader完全不带有任何的间谍软件
Foxit Reader(福昕阅读器)是一款免费的 PDF 文档阅读器和打印器,具有令人难以置信的小巧体积、快捷的启动速度和丰富的功能。新发布的 3.0 版本支持 Windows Me/2000/XP/2003/Vista/2008/7 操作系统,其核心技术与 PDF 标准版 1.7 完全兼容。 在没有 Foxit Reader 以前,为了能够打开显示 PDF 文档,您可能需要从别家公司下载一个庞大的 PDF 阅读器,等待漫长的安装过程,忍受恼人的启动画面。如果您想进一步对 PDF 文档进行批注,您还得支付至少 299 美元购买其它软件才能获得批注功能。 现在有了 Foxit Reader,您不必再忍受这些烦恼了。因为福昕阅读器带来了非常突出的优势,功能简单实用方便,极大地提升了用户体验。它的这些特点突出表现在: 1、难以置信的小巧体积:体积小巧,仅占 Acrobat Reader 20 兆容的一小部分。 2、快捷的启动速度:瞬间就可启动福昕阅读3.0,完全没有那些恼人的公司 LOGO 和作者名称的启动画面。 3、批注工具:当您阅读 PDF 文档,是否曾想过对文档进行批注呢?有了 Foxit Reader,您完全可以在文档上画图、高亮文本、输入文字,并且对批注的文档进行打印或保存。 4、文本转换器:将整份 PDF 文档转换为文本文件。 5、高度安全性和隐私性:Foxit Reader 高度尊重用户的安全性和隐私性,没有用户的许可不会主动访问互联网。而别的 Reader 却会在用户不知晓的情况下,主动从后台连接到互联网。Foxit Reader 完全不带有任何的间谍软件。 基于 Foxit Reader Pro 3.0 Build 1817 官方简体中文版制作,没有语言切换选项;集成了必需的插件,关闭了自动更新,去除了 Foxit Reader 阅读窗上的广告,界面更简洁清爽;安装结束时自动关联 PDF 格式文件,安装后就是注册版(非破解),没有任何功能限制。 Foxit Reader Pro 3.0 Build 1817 多语言增强套装 基于 Foxit Reader Pro 3.0 Build 1817 官方英文版制作,外挂 简体中文 和 繁体中文 语言文件;集成了必需的插件,关闭了自动更新,去除了 Foxit Reader Pro 阅读窗上的广告,界面更简洁清爽,默认使用简体中文界面,简体中文用户毋需额外设置;安装结束时自动关联 PDF 格式文件,安装后就是注册版(非破解),没有任何功能限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值