简单桌面搜索小工具(java)
2011-05-22 14:08
561 查看
一个简单的桌面搜索小工具
主要功能:
功能一:文件搜索
1按照文件名搜索
2按照文件扩展名搜索
3按照后缀名搜索
功能二:文本检索
//主类
//public class MainClass
//菜单
//public class Menu
//以下三个类实现文件搜索
//文件搜索
//public class Search
//最长公共子序列
//public class LCS
//输出面板
//public class displayFrame
//以下三个类实现文本检索
//文本检索
//public class Find
//寻找路径
//public class Path
//输出面板
//public class displayFrame
主要功能:
功能一:文件搜索
1按照文件名搜索
2按照文件扩展名搜索
3按照后缀名搜索
功能二:文本检索
//主类
//public class MainClass
public class MainClass { public static void main(String[] args) { Menu menu=new Menu(); menu.setVisible(true); } //构造函数 public MainClass() { ; } }
//菜单
//public class Menu
import cn.FileSearch.Search; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.filechooser.FileSystemView; import cn.FileSearch.Search; import cn.TextRetrieval.Find; public class Menu extends JFrame { private static JMenuBar jMenuBar; private static Search search; private static Find find; public Menu() { setTitle("桌面搜索小工具"); setBounds(100,100,400,200); JMenuBar jMenuBar=buildMenuBar(); setJMenuBar(jMenuBar); } public JMenuBar buildMenuBar() { //菜单条 JMenuBar jMenuBar=new JMenuBar(); // 一级菜单 JMenu xuanxiang=new JMenu("选项"); xuanxiang.getPopupMenu().setLightWeightPopupEnabled(false); jMenuBar.add(xuanxiang); // 二级菜单 JMenuItem wenjiansousuo=new JMenuItem("文件搜索"); wenjiansousuo.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent arg0) { getContentPane().repaint(); final String dir; final JRadioButton jRadioButtonWenjianming=new JRadioButton(); final JRadioButton jRadioButtonKuozhanming=new JRadioButton(); JRadioButton jRadioButtonQuanming=new JRadioButton(); final JTextField jTextField=new JTextField(); JButton jButton=new JButton(); FileSystemView fsv=FileSystemView.getFileSystemView(); dir=fsv.getHomeDirectory().getAbsolutePath(); //设置窗口属性 setBounds(100,100,400,150); setLayout(new BorderLayout()); //北部添加文本框和按钮 JPanel north=new JPanel(); north.setLayout(new BorderLayout()); jTextField.setBounds(10,10,200,60); jButton.setText("确定"); jButton.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent ae) { String str=jTextField.getText(); int choice=1; if(jRadioButtonWenjianming.isSelected()) { choice=1; } else if(jRadioButtonKuozhanming.isSelected()) { choice=2; } else { choice=3; } search=new Search(dir,choice,str); search.search(dir,choice); } } ); north.add(jTextField,BorderLayout.CENTER); north.add(jButton,BorderLayout.EAST); getContentPane().add(north,BorderLayout.NORTH); //中部添加选项 ButtonGroup buttonGroup=new ButtonGroup(); jRadioButtonWenjianming.setText("文件名搜索"); jRadioButtonWenjianming.setName("1"); jRadioButtonWenjianming.setBounds(80,20,50,50); jRadioButtonKuozhanming.setText("扩展名搜索"); jRadioButtonKuozhanming.setName("2"); jRadioButtonKuozhanming.setBounds(140,20,50,50); jRadioButtonQuanming.setText("全名搜索"); jRadioButtonQuanming.setName("3"); jRadioButtonQuanming.setBounds(190,20,50,50); buttonGroup.add(jRadioButtonWenjianming); buttonGroup.add(jRadioButtonKuozhanming); buttonGroup.add(jRadioButtonQuanming); JPanel center=new JPanel(); center.add(jRadioButtonWenjianming); center.add(jRadioButtonKuozhanming); center.add(jRadioButtonQuanming); getContentPane().add(center,BorderLayout.CENTER); getContentPane().repaint(); } } ); xuanxiang.add(wenjiansousuo); //二级菜单 JMenuItem wenbenjiansuo=new JMenuItem("文本检索"); wenbenjiansuo.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { getContentPane().repaint(); final String dir; final JTextField jTextField=new JTextField(); final JButton jButton=new JButton(); final JTextField jiansuo=new JTextField(); FileSystemView fsv=FileSystemView.getFileSystemView(); dir=fsv.getHomeDirectory().getAbsolutePath(); setBounds(100,100,400,150); setLayout(new BorderLayout()); JPanel north=new JPanel(); north.setLayout(new BorderLayout()); jTextField.setBounds(0,0,200,50); jTextField.setText("请输入文本名"); north.add(jTextField,BorderLayout.CENTER); jButton.setText("确定"); jButton.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent arg0) { String str=jTextField.getText(); String jian=jiansuo.getText(); find=new Find(str,jian); find.find(dir); } } ); north.add(jButton,BorderLayout.EAST); getContentPane().add(north,BorderLayout.NORTH); JPanel center=new JPanel(); jiansuo.setBounds(250,150,100,50); jiansuo.setText("请输入检索内容"); center.add(jiansuo,BorderLayout.CENTER); getContentPane().add(center,BorderLayout.CENTER); getContentPane().repaint(); } } ); xuanxiang.add(wenbenjiansuo); //二级菜单 JMenuItem tuichu=new JMenuItem("退出"); tuichu.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(1); } } ); xuanxiang.add(tuichu); //一级菜单 JMenu aboutMenu = new JMenu("关于"); jMenuBar.add(aboutMenu); //二级菜单 JMenuItem infoItem = new JMenuItem("说明"); infoItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"桌面搜索小工具/n" +"Designed by: zhuxin","Information", JOptionPane.INFORMATION_MESSAGE); } }); aboutMenu.add(infoItem); return (jMenuBar); } }
//以下三个类实现文件搜索
//文件搜索
//public class Search
//搜索文件 package cn.FileSearch; import java.io.File; public class Search { private static String dir=new String(); private static int choice; private static String wenjianming=new String(); private static displayFrame display=new displayFrame(); public String[] str=new String[50]; public int count=0; public Search() { ; } public Search(String dir,int choice,String wenjianming) { this.dir=dir; this.choice=choice; this.wenjianming=wenjianming; } public void search(String dir,int choice) { //全名搜索 if(choice==3) { File file=new File(dir); File[] files=file.listFiles(); //结束条件 if(files==null) { return ; } for(int i=0;i<files.length;i++) { //如果是 if(files[i].isDirectory()) { if(files[i].getName().equals(wenjianming) ||(LCS.lcs(files[i].getName(),wenjianming)/(double)wenjianming.length()>=0.75 &&LCS.lcs(files[i].getName(),wenjianming)/(double)files[i].getName().length()>=0.75)) { str[count++]=files[i].getAbsolutePath(); System.out.println(files[i].getAbsolutePath()); } search(files[i].getAbsolutePath(),choice); } //如果是文本 else { String name=files[i].getName(); if(name.length()>0) { if(name.equals(wenjianming) ||(LCS.lcs(name,wenjianming)/(double)wenjianming.length()>=0.75 &&LCS.lcs(name,wenjianming)/(double)name.length()>=0.75)) { str[count++]=files[i].getAbsolutePath(); System.out.println(files[i].getAbsolutePath()); } } } } display.add(str); display.setVisible(true); } //后缀名搜索 else if(choice==2) { File file=new File(dir); File[] files=file.listFiles(); //结束条件 if(files==null) { return ; } for(int i=0;i<files.length;i++) { //如果是目录 if(files[i].isDirectory()) { search(files[i].getAbsolutePath(),choice); } //如果是文本 else { int index=files[i].getName().lastIndexOf("."); String extra=files[i].getName().substring(index+1); if(extra.equals(wenjianming) ||(LCS.lcs(extra,wenjianming)/(double)wenjianming.length()>=0.75 &&LCS.lcs(extra,wenjianming)/(double)extra.length()>=0.75)) { str[count++]=files[i].getAbsolutePath(); display.add(str); display.setVisible(true); System.out.println(files[i].getAbsolutePath()); } } } } else { File file=new File(dir); File[] files=file.listFiles(); //结束条件 if(files==null) { return ; } for(int i=0;i<files.length;i++) { //如果是目录 if(files[i].isDirectory()) { if(files[i].getName().equals(wenjianming) ||(LCS.lcs(files[i].getName(),wenjianming)/(double)wenjianming.length()>=0.75 &&LCS.lcs(files[i].getName(),wenjianming)/(double)files[i].getName().length()>=0.75)) { str[count++]=files[i].getAbsolutePath(); System.out.println(files[i].getAbsolutePath()); } search(files[i].getAbsolutePath(),choice); } //如果是文本 else { String name=files[i].getName(); int index=name.lastIndexOf("."); if(index>0) { name=name.substring(0,index); if(name.length()>0) { if(name.equals(wenjianming) ||(LCS.lcs(name,wenjianming)/(double)wenjianming.length()>=0.75 &&LCS.lcs(name,wenjianming)/(double)name.length()>=0.75)) { str[count++]=files[i].getAbsolutePath(); System.out.println(files[i].getAbsolutePath()); } } } } } display.add(str); display.setVisible(true); } } }
//最长公共子序列
//public class LCS
//最长公共子序列 package cn.FileSearch; public class LCS { public LCS() { ; } public static int lcs(String source,String target) { int m=source.length()-1; int n=target.length()-1; int[][] c=new int[m+1][n+1]; for(int i=1;i<=m;i++) { c[i][0]=0; } for(int i=1;i<=n;i++) { c[0][i]=0; } for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(source.charAt(i)==target.charAt(j)) { c[i][j]=c[i-1][j-1]+1; } else if(c[i-1][j]>=c[i][j-1]) { c[i][j]=c[i-1][j]; } else { c[i][j]=c[i][j-1]; } } } return c[m] +1; } }
//输出面板
//public class displayFrame
//输出 package cn.FileSearch; import java.awt.Color; import javax.swing.JFrame; //用JList输出 import javax.swing.JList; import javax.swing.JScrollPane; public class displayFrame extends JFrame { private static JList jList; private static JScrollPane jScrollPane=new JScrollPane(); public displayFrame() { setTitle("文件路径"); setBounds(100,250,400,375); } public void add(String[] str) { jList=new JList(str); jList.setBackground(Color.green); jList.setFixedCellWidth(5000); jList.setVisibleRowCount(100); jScrollPane.setViewportView(jList); getContentPane().add(jScrollPane); } }
//以下三个类实现文本检索
//文本检索
//public class Find
//检索 package cn.TextRetrieval; import java.awt.Color; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import javax.swing.text.AttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; public class Find { private String wenben; private String jiansuo; private static Path path=new Path(); private static String absolutePath; private static displayFrame display=new displayFrame(); public Find() { ; } public Find(String wenben,String jiansuo) { this.wenben=wenben; this.jiansuo=jiansuo; } public void find(String dir) { path.path(dir,wenben); absolutePath=new String(path.getAbsolutePath()); File file=new File(absolutePath); FileReader fr; BufferedReader br; String str; try { fr = new FileReader(file); br=new BufferedReader(fr); boolean state; display.setVisible(true); int count=1; while((str=br.readLine())!=null) { str=String.valueOf(count)+"/t"+str; count++; if(str.indexOf(jiansuo)!=-1) { display.setRed_UnderLine_Italic_24(str);; } else { display.setBlue_Italic_Bold_22(str); } } } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
//寻找路径
//public class Path
//根据文件名找路径 package cn.TextRetrieval; import java.io.File; //根据名称找路径 public class Path { private static String absolutePath; public Path() { ; } public static String getAbsolutePath() { return absolutePath; } public static void path(String dir,String str) { File file=new File(dir); File[] files=file.listFiles(); for(int i=0;i<files.length;i++) { if(files[i].isDirectory()) { path(files[i].getAbsolutePath(),str); } else { int index=files[i].getName().lastIndexOf("."); if(index>0) { String name=files[i].getName().substring(0,index); if(str.equals(name)) { absolutePath=new String(files[i].getAbsolutePath()); return ; } } } } } }
//输出面板
//public class displayFrame
package cn.TextRetrieval; import javax.swing.*; import javax.swing.text.*; import java.awt.event.*; import java.awt.*; public class displayFrame extends JFrame { private static JTextPane jTextPane=new JTextPane(); private static JPanel jPanel; private static JScrollPane jScrollPane; public displayFrame() { setTitle("检索结果"); setBounds(100,250,400,400); jTextPane.setBackground(Color.white); jTextPane.setEditable(true); jTextPane=new JTextPane(); jPanel=new JPanel(new BorderLayout()); jPanel.add(jTextPane); jScrollPane=new JScrollPane(jPanel); getContentPane().add(jScrollPane); } public void setBlue_Italic_Bold_22(String str) { SimpleAttributeSet attrset=new SimpleAttributeSet(); StyleConstants.setForeground(attrset,Color.black); StyleConstants.setItalic(attrset,true); StyleConstants.setFontSize(attrset,12); insert(str,attrset); } public void setRed_UnderLine_Italic_24(String str) { SimpleAttributeSet attrset = new SimpleAttributeSet(); StyleConstants.setForeground(attrset,Color.red); StyleConstants.setItalic(attrset,true); StyleConstants.setFontSize(attrset,12); insert(str,attrset); } // 这个方法最主要的用途是将字符串插入到JTextPane中。 public void insert(String str, AttributeSet attrset) { Document docs =jTextPane.getDocument(); str=str+"/n"; try { docs.insertString(docs.getLength(),str,attrset); } catch(BadLocationException ble) { System.out.println("BadLocationException:"+ble); } } }
相关文章推荐
- 用Lucene做一个简单的Java搜索工具
- 学习数据结构搜索的的意外收获哈。一个简单的基于java的网页抓取程序。
- JAVA - Sql解析工具fdb-sql-parser简单使用
- jClarity 提供了新工具,Java性能调校更简单
- Java5的Exchanger同步工具简单实例
- java简单检测ping值的工具,可监测指定进程的网络连接ping值和指定IP的ping值
- 桌面快捷图标 搜索工具
- java常用类解析五:IO系统File类及文件搜索工具类
- Java类搜索工具 ClassSearch
- 详解Java的Hibernate框架中的搜索工具的运用
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- 用python Tkinter编写简单的文件搜索工具
- 使用exe4j工具制作简单的java应用程序
- Java单元测试工具:JUnit4(一)——概述及简单例子
- 简单网站入侵.工具:1.啊D注入 2.百度高级搜索
- 【软件-InstallAnywhere】Java软件打包:将指定的文件创建快捷方式并安装到桌面(工具installanywhere2012)
- Google推新版桌面搜索工具 安全性能增强
- apache CXF wsdl2java工具的简单使用
- 工具方法:java导出Excel表格(简单示例)