简要理解:文件搜索器其本质就是对文件目录的遍历查找。主要就是在根目录下进行循环遍历,如果是目录则继续查找,如果是文件就返回文件路径。但是简单的进行遍历在文件非常多则很是耗时,因此借用线程来节约时间。
此为文件搜索器的界面代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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;
/**
* 文件搜索器界面
* @author hadoop
*
*/
public class Border implements ActionListener{
private JFrame frame;
private JTextField text1,text2;
private JTextArea area=new JTextArea(40,50);
/**
* @param 主函数
*/
public static void main(String[] args) {
Border border=new Border();
border.init();
}
private void init() {
JFrame jfame=new JFrame();
JPanel jp=new JPanel();
jfame.setSize(800, 800);
jfame.setDefaultCloseOperation(3);
jfame.setTitle("文件查询器");
jfame.setLayout(new BorderLayout());
JLabel lable1=new JLabel("文件名: ");
text1=new JTextField(14);
JLabel lable2=new JLabel("根目录: ");
text2=new JTextField(14);
JButton j=new JButton("搜索");
jfame.add(jp,BorderLayout.NORTH);
jfame.add(lable1,BorderLayout.SOUTH);
jp.add(lable1);
jp.add(text1);
jp.add(lable2);
jp.add(text2);
jp.add(j);
jfame.setVisible(true);
jfame.add(new JScrollPane(area));//添加组件,显示文件内容
//添加监听
j.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String string=e.getActionCommand();
if(string.equals("搜索")){
FileSearchThread fileListener=new FileSearchThread(text1,text2,area);
fileListener.start();
}
}
然后就是搜索文件的线程
/**
* 文件搜索的线程
* @author hadoop
*
*/
public class FileSearchThread extends Thread {
private JTextField keyfield;
private JTextField pathfield;
private JTextArea display;
//构造方法
public FileSearchThread(JTextField keyfield,JTextField pathfield,JTextArea display){
this.keyfield=keyfield;
this.pathfield=pathfield;
this.display=display;
}
public void run(){
String key=keyfield.getText();
String path=pathfield.getText();
searchfile(key,path);
}
//递归搜索文件
private void searchfile(String keyword, String path) {
File file=new File(path);
if(file.exists()){
if(file.isDirectory()){
File fileArray[]=file.listFiles();
if(fileArray!=null){
for(int i=0;i<fileArray.length;i++){
searchfile(keyword,fileArray[i].getAbsolutePath());
}
}
}
if(file.isFile()){
if(file.getName().indexOf(keyword)!=-1)//如果关键字在文件中出现
display.append(file.getAbsolutePath()+"\n");
}
}
}
}