文件搜索器
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.效果如下: