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(); }