文件搜索器的总结

最近在学习了文件对象的部分内容之后,掌握了对磁盘上文件的遍历,做了一个文件搜索器。

1.功能说明:

   实现了通过输入文件名(带扩展名)对磁盘上所有待搜索的真实文件的搜索,以及对所有搜索结果的统计。

2.图片展示:

 
文件搜索器的总结_第1张图片

3.技术分析:

  (1).使用了Swing组件里的菜单,使界面更为简洁.

  

// 加入菜单栏
		javax.swing.JMenuBar jmb = new javax.swing.JMenuBar();
		javax.swing.JMenu jm = new javax.swing.JMenu("控制");
		javax.swing.JMenuItem item = new javax.swing.JMenuItem("开始");

  (2).搜索功能的实现主要是对所选磁盘上的所有文件进行遍历,然后用其中的真实文件的名字与输入的名字比较,相同就输出到输出框上,其中对磁盘遍历是采用了递归的算法,具体代码如下:

  

package yfr.Fsearch315;

import java.awt.FlowLayout;
import java.io.File;

import javax.swing.JFrame;
/**
 * 文件搜索器界面类
 * @author Administrator
 *
 */
public class SearchUI extends JFrame {

	public static javax.swing.JTextField txt;
	public static javax.swing.JTextArea result;
	public static int count = 0;
	private String[] root ;
	public static javax.swing.JComboBox jcom ;

	public static void main(String[] args) {

		SearchUI UI = new SearchUI();

		UI.showUI();
	}

	/**
	 * 显示界面的方法
	 */
	public void showUI() {
		// 设置窗体属性
		this.setTitle("Files Searching");
		this.setSize(300, 320);
		this.setDefaultCloseOperation(3);
		this.setResizable(false);
		// 设置布局管理器
		FlowLayout fl = new FlowLayout();
		this.setLayout(fl);
		// 加入菜单栏
		javax.swing.JMenuBar jmb = new javax.swing.JMenuBar();
		javax.swing.JMenu jm = new javax.swing.JMenu("控制");
		javax.swing.JMenuItem item = new javax.swing.JMenuItem("开始");
		this.setJMenuBar(jmb);
		jmb.add(jm);
		jm.add(item);

		// 创建3个JLabel 用以提示用户
		javax.swing.JLabel lab1 = new javax.swing.JLabel("输入 ");
		javax.swing.JLabel lab2 = new javax.swing.JLabel("输出 ");
		javax.swing.JLabel lab3 = new javax.swing.JLabel("请选择盘符 ");
		// 创建文本框,用来输入文件名
		this.add(lab1);
		txt = new javax.swing.JTextField(20);
		this.add(txt);
		// 创建文本框,用来打印搜索结果
		this.add(lab2);
		result = new javax.swing.JTextArea(10, 20);
		result.setEditable(true);
		result.setBackground(java.awt.Color.white);
		//创建一个滚动条对象
		javax.swing.JScrollPane spn = new javax.swing.JScrollPane(result);
		this.add(spn);
	//	this.add(result);
		//创建一个面板对象
		javax.swing.JPanel select = new javax.swing.JPanel();
		java.awt.Dimension dim = new java.awt.Dimension(100,20);
		this.add(select);
		listroot();
		jcom = new javax.swing.JComboBox(root);
		select.add(lab3);
		select.add(jcom);

		

		// 设置可见
		this.setVisible(true);

		// 创建一个搜索监听器
		SearchListener slis = new SearchListener();
		// 给菜单选项加上监听器
		item.addActionListener(slis);
		//给下拉框加上监听器
		jcom.addActionListener(slis);

	}
	/**
	 * 获得机器的所有盘符
	 */
	public void listroot(){
		final int rootnumber;//机器的盘符数
		
		File opp = new File("");
		File[] rootlist = opp.listRoots();
		rootnumber = rootlist.length;
		root = new String[rootnumber];
		for(int i=0;i<rootlist.length;i++){
			this.root[i] = rootlist[i].getAbsolutePath();
		}
		for(int i=0;i<rootlist.length;i++){
			System.out.println(root[i]);
		}
	}
}

 

package yfr.Fsearch315;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;

/**
 * 文件搜索器的监听器类
 * @author Administrator
 *
 */
public class SearchListener implements java.awt.event.ActionListener{

	private String name;
	private String root="C:\\";
	@Override
	public void actionPerformed(ActionEvent e) {
		this.name = SearchUI.txt.getText();
		this.root = (String)SearchUI.jcom.getSelectedItem();
		System.out.println(root);
		SearchUI.count = 0;	
		if(e.getActionCommand().equals("开始")){
		//listroot();
		File opp = new File(root);
		seek(opp);
		SearchUI.result.append("共找到"+SearchUI.count+"个文件!");
		}
	}
	/**
	 * 获得系统根目录,并在每个根目录下搜索名为name的文件
	 * @param s
	 * @return 每个名为name的文件的绝对路径
	 */
	/*private void listroot(){
		
		//获得所有系统的根目录
		File[] fs = opp.listRoots();
		for(int i=0;i<fs.length;i++){
			seek(fs[i]);
		}
	}*/
	
	/**
	 * 搜索文件的方法
	 */
	private void seek(File opp){
		File[] files = opp.listFiles();
		if(files==null||files.length==0)
			return;
		for(int i=0;i<files.length;i++){
			if(files[i].isDirectory()){
				seek(files[i]);
			}else if(files[i].isFile()&&(files[i].getName().equals(this.name))){
				System.out.println(files[i].getAbsolutePath());
				SearchUI.result.append(files[i].getAbsolutePath()+"\r\n");
				SearchUI.count++;
			}
		}
		return;
	}
	

}

 

 

   4.待解决的问题:

      (1).目前还是只能在某个磁盘上进行搜索,还不能具体选择某个文件夹进行搜索。

      (2).还不能实现搜索过程的暂停。

 

 

你可能感兴趣的:(算法,UI,swing)