简单文件搜索器的实现

1.文件搜索器第一步设计文件搜索器的界面。

(1)我这里首先设置了一个JTextField文本框,用来写入要搜索的内容。

(2)然后下面是一个文本域用来显示搜索到的内容(注意文本域最好写在JScrollPane中,这样就可以滑动显示更多的内容)

2.第二步自然就是用选择盘符中的文件与输入文本进行比较

(1)比较用到Pattern类和matcher类来进行

实际操作如下:

 Pattern p = Pattern.compile(text);

 Matcher m = p.matcher("aa");

 boolean b = m.find();

这样只要text中包含”aa“的内容都会返回一个true;

(2)实际操作中如果搜索一次就在该盘符中寻找一次,因为我们的寻找用的是递归的方法所以会浪费大量的时间。

我这里把该盘符下所有的文件以及文件名写入map集合中(其中key为文件名,value为文件)

代码如下

 Map<String, File> allFile = new HashMap<String, File>();
File f1=new File(filePath);
		File [] listFiles=f1.listFiles();
		for (File file : listFiles) {
			if(file.isFile())
			{
				allFile.put(file.getName(), file);
			}
			else
			{
				FileThread ft=new FileThread(file);
				ts.add(ft);
				ft.start();
			}
		}

其中FileThread方法中用线程循环的方式添加文件夹中的文件

最后再将map集合中的内容保存到我们指定路径的文件中,这样可以保证下次比较可以不用再次读取盘符内容,从而大大提高速度。

3既然这样我们就可以搜索出知道盘符下的内容,我们不如在这基础上添加一个打开的功能

(1)首先我们得获取你点击的JtextArea所在行的文本内容:

所用的方法如下:

public void mouseClicked(MouseEvent e)
			{
				 try {  	
		    	     Rectangle rec = jta.modelToView(jta.getCaretPosition());
		    	     height=rec.y / rec.height + 1;
		    	     int start=jta.getLineStartOffset(height-1);
		    	     int end = jta.getLineEndOffset(height-1);
		    	     System.out.println(rec.y / rec.height + 1); 
		    	     System.out.println(start+"======="+end);
		    	     path=jta.getText(start, end-start);
			    	 path = path.replaceAll("\r|\n", "");
		    	    } catch (BadLocationException e1) { 
		    	     e1.printStackTrace(); 
		    	    }}

path的内容即为鼠标所点击的文本行的内容。

(2)既然获取了鼠标点击的文本即为所要打开的路径,我们这里又在鼠标右击中提供了2中打开方式(一种为系统打开,第二种为用我们编写程序自己打开,不过自己打开的文件有限,目前只实现了.txt文件..gif文件和.jpg文件)

系统打开方式很简单,只用一行代码:

 if("系统打开".equals(command))
                {
						Runtime.getRuntime().exec("cmd /c start " + path);
					}

我们自己编程打开.txt的方式为用BufferedReader读取所点击文本的内容,然后显示在弹出的TextDialog中,主要代码如下:

jta=new JTextArea();
        JScrollPane jsp=new JScrollPane(jta);
		try {
			
	    FileReader fr = new FileReader(path);
		BufferedReader br=new BufferedReader(fr);
			while((s=br.readLine())!= null)
			{		
			jta.append(s);
			jta.append("\n");}
			br.close();
			
		} catch (Exception e) {
		
			e.printStackTrace();
		};

实现图片的打开方式为用图片路径获取图片,然后调用paint方法将其画出,主要代码如下(为防止图片闪烁,此处用了双缓冲):

ImageIcon imageIcon = new ImageIcon(path);
		int width = imageIcon.getIconWidth();
		int height = imageIcon.getIconHeight();
image = imageIcon.getImage();
public void paint(Graphics g) {
		Image img=createImage(getWidth(),getHeight());
		Graphics gg=img.getGraphics();
		gg.drawImage(image, 0, 0, null);
		g.drawImage(img, 0, 0, null);
	}


以上即为简单文件搜索器的实现。最后贴上一张完工的效果图:

自己方式打开效果:

系统打开方式:


图片打开跟上面差不多,这里就不展示了。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值