• 黑马程序员——文件中截取需要的信息---基础课程练习


    ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------



    在看完了毕老师的基础视频后自己写的爬号器:


    理想中的爬号器:

    可以扫描任任何文件,自动扫描关键字网页,获取所需数据

    对号码,比如QQ号码实现邮件、加好友、空间留言等腾讯应用的各种辅助,自娱自乐功能

    实现的爬号器:

    获取指定文件中符合规则数据并存储到文件中


    package Gane;
    public class Tool {
    	
    	public static void main(String args[]) throws IOException{
    		new MyFrame();
    	}	
    }


    package Gane;
    
    import java.awt.Button;
    import java.awt.Dialog;
    import java.awt.FileDialog;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.Menu;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    
    //图形化界面
    class MyFrame{
    	private Frame f ;
    	private MenuBar mb;
    	private Menu m1, m2;
    	private MenuItem mi;
    	private TextField tf1, tf2;
    	private TextArea ta;
    	private Button bt1, bt2, bt3, bt4;
    	private Dialog d;
    	private FileDialog fd1, fd2;
    	
    	MyFrame(){
    		init();
    	}
    	public void init(){
    		f= new Frame("TC爬号器");
    		f.setBounds(1100, 400, 600, 400);
    		f.setLayout(new FlowLayout());
    		
    		mb = new MenuBar();
    		m1 = new Menu("菜单");
    		m2 = new Menu("其他");
    		mi = new MenuItem("退出");
    		
    		mb.add(m1);
    		mb.add(m2);
    		m1.add(mi);
    		
    		tf1 = new TextField(20);
    		tf2 = new TextField(20);
    		ta = new TextArea();
    		bt1 = new Button("选择文件");
    		bt2 = new Button("获取号码");
    		bt3 = new Button("生成邮件地址");
    		bt4 = new Button("确定");
    		ta = new TextArea("使用说明....", 15, 60);
    		
    		d = new Dialog(f,"提示", true);
    		d.setLayout(new FlowLayout());
    		d.setBounds(1300, 560, 50, 90);
    		d.add(bt4);
    		fd1 = new FileDialog(f, "选择扫描文件", FileDialog.LOAD);
    		fd2 = new FileDialog(f, "保存生成文件", FileDialog.SAVE);
    		
    		
    		f.add(tf1);		
    		f.add(bt1);
    //		f.add(tf2);
    		f.add(bt2);
    		f.add(bt3);
    		f.add(ta);
    
    		f.setMenuBar(mb);
    		f.setVisible(true);
    		
    		MyEvent();
    	}
    	public void MyEvent(){
    		wC(f);
    		wC(d);
    		mi.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				d.setVisible(true);
    			}
    		});
    		bt1.addMouseListener(new MouseAdapter(){
    			public void mousePressed(MouseEvent e){		//mouseEntered
    				fd1.setVisible(true);
    				String file = fd1.getFile();
    				String path1 =  fd1.getDirectory() + file;
    				String path = path1.replace("\", "\\");
    //				System.out.println(path);
    				tf1.setText(path);
    			}
    		});
    		bt2.addMouseListener(new MouseAdapter(){
    			public void mousePressed(MouseEvent e){		//mouseEntered
    				String path = tf1.getText();
    				try {
    					//调用方法获取号码,并将反馈信息展示到ta中
    					ta.setText(new Number().getNumber(path));
    					
    				} catch (IOException e1) {
    					ta.setText("读取文件失败");
    					new RuntimeException();
    				}
    			}
    		});
    		bt3.addMouseListener(new MouseAdapter(){
    			public void mousePressed(MouseEvent e){		//mouseEntered
    				//调用方法生成邮件地址,并将反馈信息展示到ta中
    				String path = tf1.getText();
    				try {
    					//调用方法获取号码,并将反馈信息展示到ta中
    					ta.setText(new Number().getMail(path));
    					
    				} catch (IOException e1) {
    					ta.setText("读取文件失败");
    					new RuntimeException();
    				}
    			}
    		});
    		bt4.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				System.exit(0);
    			}
    		});
    	}
    
    	
    	public void wC(Frame f){
    		f.addWindowListener(new WindowAdapter(){
    			public void windowClosing(WindowEvent e){
    				System.exit(0);
    			}
    		});
    	}
    	public void wC(Dialog d){
    		d.addWindowListener(new WindowAdapter(){
    			public void windowClosing(WindowEvent e){
    				System.exit(0);
    			}
    		});
    	}
    	
    }


    package Gane;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.TreeSet;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    class Number{
    	private String aim ="C:\Users\Administrator\Desktop\";
    	private FileWriter fw;
    	
    	/*获取号码*/
    	public String getNumber(String path) throws IOException{
    		TreeSet ts = getTS(path);
    		//将数据写到文件中
    		aim = aim + "QQNumber.txt";
    		fw = new FileWriter(aim);
    		fw.write("共扫到号码:"+ts.size()+" 个
    ");
    		
    		Iterator<Long> it = ts.iterator();
    		while(it.hasNext()){
    			Long l = it.next();
    			fw.write(l + "
    ");
    			fw.flush();
    		}
    		
    		fw.close();
    		return "共扫到号码:"+ts.size()+" 个
    ";
    	}
    	
    	/*生成邮件地址*/
    	public String getMail(String path) throws IOException{
    		TreeSet ts = getTS(path);
    		//将数据写到文件中
    		aim = aim +"MainNumber.txt";
    		fw = new FileWriter(aim);
    		fw.write("共生成邮件地址:"+ts.size()+" 个
    ");
    		
    		Iterator<Long> it = ts.iterator();
    		while(it.hasNext()){
    			Long l = it.next();
    			fw.write(l + "@qq.com
    ");
    			fw.flush();
    		}
    		
    		fw.close();
    		return "共生成邮件地址:"+ts.size()+" 个
    ";
    	}
    	
    	private TreeSet getTS(String path) throws IOException{
    		FileReader fr = new FileReader(path);
    		TreeSet<Long> ts = new TreeSet<Long>();		
    		
    		char[] buf = new char[1024];
    		int ch = 0;
    		while((ch = fr.read(buf)) != -1)
    		{
    			String str = new String(buf, 0, ch);
    			String reg = "[1-9][0-9]{7,10}";
    			
    			Pattern p = Pattern.compile(reg);
    			Matcher m = p.matcher(str);
    			
    			while(m.find())
    			{
    				String s = m.group();
    				long l = Long.parseLong(s);
    				ts.add(l);
    			}	
    		}
    		fr.close();	
    		return ts;
    	}	
    }
    



    ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

    用心-细心-专心-决心 学习就像爬大山,一步一步向前走 -态度决定高度-
  • 相关阅读:
    基于jeesit下的工作流开发步骤
    SQL Server DBA SQL
    SQL Server 全文索引的硬伤
    SQL Server全文搜索
    数据库SQL优化大总结之 百万级数据库优化方案2
    百倍性能的PL/SQL优化案例(r11笔记第13天)
    SQL优化 · 经典案例 · 索引篇
    数据库SQL优化大总结之 百万级数据库优化方案
    pytest文档23-使用多个fixture和fixture直接互相调用
    pytest文档22-fixture详细介绍-作为参数传入,error和failed区别
  • 原文地址:https://www.cnblogs.com/xianyou-liang/p/8503366.html
Copyright © 2020-2023  润新知