你是搜文件名,还是搜文件内容?要是搜文件内容可就麻烦了,有可能的话你看看Java的一个开源库Lucene。
要是简单的搜文件名包含的字符串,大致应该涉及到文件树的遍历算法,最多用一些简单的正则表达式来匹配文件名,一般用递归可以实现任意级目录树的搜索。
给你个简单的版本吧:
package test.tool;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindFile {
private String fileName = "";
private String dir = "";
private Matcher m = null;
private int count = 0;
public FindFile() throws IOException {
String f = FindFile.class.getResource("findfile.properties").getFile();
BufferedReader read = new BufferedReader(new FileReader(f));
dir = read.readLine().trim();
fileName = read.readLine().trim();
Pattern p = Pattern.compile(fileName);
m = p.matcher("");
}
public void find() {
File root = new File(dir);
for (File f : root.listFiles()) {
if (f.isDirectory()) {
dir = f.getAbsolutePath();
find();
} else {
m.reset(f.getName());
if (m.find()) {
count++;
System.out.println(f.getAbsolutePath());
}
}
}
}
public static void main(String[] args) {
try {
FindFile ff = new FindFile();
ff.find();
System.out.println("\n共找到文件数目:" + ff.count);
} catch (IOException e) {
e.printStackTrace();
}
}
}
里面用到的findfile.properties,举个例子:
F:\download
vod.*.exe
运行效果如下:
F:\download\firefox\vodplayer.exe
F:\download\ie\vodplayer.exe
共找到文件数目:2
使用递归
方法传递首次 查询文件路径以及待查询文件名两个参数;
用File.list方法获取文件夹以及文件,如果是文件则获取该文件的名字进行contains 待查询文件名,并打印文件名;如果是文件夹则继续调用本方法传递该文件夹路径以及待查询文件名。
java.io.File这个类你可以去看下。
搜搜