文件搜索器

 1. 文件搜索器很早之前就完成了一直都没来得及发.今天就来谈谈自己的文件搜索器,写搜索器要知道几个文件方法面的方法.比如说:isFile(),listFiles()以及getAbsolutePath()等一些方法.这里我还用到了JFileChooser类.


2.JFileChooser类中的部分方法如下,该类便于选取所要查找的路径

if(e.getActionCommand().equals("选取")){
					//创建选择文件框
					JFileChooser fileChooser = new JFileChooser();
					//设置选择文件框即可以读取文件又可以读取目录
					fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
					//弹出一个 "Open File" 文件选择器对话框
					fileChooser.showOpenDialog(null);
					//返回选中的文件目录
					File selectFile = fileChooser.getSelectedFile();
					//判断该目录是否存在
					if(selectFile!=null){
						//将选中的目录显示在路径的文本框中
						jtext1.setText(selectFile.getAbsolutePath());
//						jtext1.setText("");
						}
				}

 

3.文件搜索器最重要的就是对搜索方法的定义了,定义该方法的时候我是用的给出一个路径然后按照关键字去搜索,我分了四步.

 

第一步:需要一个文件这是必要的,然后判断该文件(也不确定是否目录)是否存在

//创建文件
File file = new File(path);
//列出子目录
File [] sonFile = file.listFiles();
System.out.println("---"+sonFile);
			
//判断子目录是空目录还是空文件
if(sonFile.length == 0 || null == sonFile){
	return 0;
}

第二步: 当第一步判断出目录(文件)存在这时就遍历出子目录(文件),并且判断该目录(文件)是否有要查找的关键字

//遍历子目录
for(int i=0;i<sonFile.length;i++){
				
//取出子目录
File fi = sonFile[i];
String filePath = fi.getAbsolutePath();//取得路径
System.out.println("取得的路径是: "+filePath);
//判断是否有关键字
if((filePath.indexOf(keyWords))!=-1){
//文本域显示路径
jtexta.append(filePath+"\r\n");
//状态栏标签显示路径
jlabel.setText(filePath);
} 

第三步:上述步骤搜索到的也不清楚是文件还是目录,当搜索到的是目录的时候,递归调用继续搜索

//搜索的为目录
if(fi.isDirectory()){
//递归继续调用方法搜索
soso(filePath,keyWords);
}

 第四步:自然根据上述步骤,就是当搜索到的是文件的时候就显示出关键字所在行以及列

 

//搜索的为文件
if(fi.isFile()){
//			
String filename = fi.getAbsolutePath();//取得子目录路径
File searchfile = new File(filename);
    FileReader fread = new FileReader(searchfile);
					   
       BufferedReader bf = new BufferedReader(fread);
       String str = "";
       int y = 0;
       int x = 0;
       try {
        while ((str = bf.readLine()) != null) {
		if ((x = str.indexOf(keyWords)) != -1) {
		jtexta.append("文件:" + filename + "\r\n");
		System.out.println("   " + keyWords+ "  关键字在" + filename + 
                "的第" + y+ "行,第" + x + "处"+"\r\n");
                jtexta.append("   " + keyWords + "  关键字在"+ filename + "的第" + y + "行,
                第" + x+ "处" + "\r\n");
}
y++;
}

以上就是搜索文件的四个步骤.

 

4.速度的关系就把搜索文件的放到了一个线程上了,具体实现如下:

public void run(){
	String path = jtext1.getText();//取得路径
	System.out.println("路径是: "+path);
	String keyWords = jtext.getText();//取得关键字
	File files = new File(path);//创建文件
	counts = soso(path,keyWords);//该方法返回文件数目
	soso(path,keyWords);
	jtexta.append(files+"目录下找到的文件个数是  "+counts);
        //停止线程
		searchThread.stop();
}

 

5.效果如下:
文件搜索器_第1张图片
 

 

你可能感兴趣的:(java)