File应用之文件搜索器(关键字搜索)

简要理解:文件搜索器其本质就是对文件目录的遍历查找。主要就是在根目录下进行循环遍历,如果是目录则继续查找,如果是文件就返回文件路径。但是简单的进行遍历在文件非常多则很是耗时,因此借用线程来节约时间。

 此为文件搜索器的界面代码:

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");


			}
		}
		
		
	}

	

}
 

你可能感兴趣的:(File)