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);
}
以上即为简单文件搜索器的实现。最后贴上一张完工的效果图:
自己方式打开效果:
系统打开方式:
图片打开跟上面差不多,这里就不展示了。