您的位置:首页 > 编程语言 > Java开发

简单桌面搜索小工具(java)

2011-05-22 14:08 561 查看
一个简单的桌面搜索小工具

主要功能:

功能一:文件搜索

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: