有一次用Google桌面的搜索功能,感觉搜索面积太窄了,检索不到自己需要的文件,一时心血来潮,写了一个磁盘文件搜索的功能,嘿嘿,将代码贴出来,后来用Swing实现了一个可视化的搜索工具,改进了部分代码,不过代码太长了就不贴了。
/**
* 实现硬盘文件搜索功能
*
* @param String
* fileName,String fileType,
* @param String
* searchPath,boolean matchAll
* @param boolean ignoreCase
* @return
*/
public static void searchFile(String fileName, final String fileType,
String searchPath, boolean matchAll, boolean ignoreCase) {
// 先判断传入的文件名
if (fileName == null || "".equals(fileName)) {
return;
}
// 实例化参数对象
File[] files = null;
FileFilter typeFilter = new FileFilter() {
public boolean accept(File pathName) {
if (pathName.isDirectory()) {
return true;
} else {
if (fileType == null || "".equals(fileType)) {
return true;
} else if (pathName.getName().endsWith("." + fileType)) {
return true;
}
}
return false;
}
};
// 如果指定搜索路径 则限定搜索 否则 全盘搜索
if (searchPath == null || "".equals(searchPath)) {
files = File.listRoots();
} else {
files = new File[1];
files[0] = new File(searchPath);
}
for (File file : files) {
doIt(fileName, file, typeFilter, matchAll, ignoreCase);
}
}
/**
* DOIT SEARCH
*
* @param String
* fileName,String fileType,
* @param String
* searchPath,boolean matchAll
*
* @return
*/
private static List<String> doIt(String fileName, File file, FileFilter filter,
boolean matchAll, boolean ignoreCase) {
System.out.println("正在搜索:"+file);
File[] files = file.listFiles(filter) != null ? file.listFiles(filter)
: new File[0];// 先迭代当前目录结构的文件
for (File file2 : files) {
if (file2.isDirectory()) {
doIt(fileName,file2,filter,matchAll,ignoreCase);
} else {
if("*".equals(fileName)){
fileList.add(file2.getAbsolutePath());
}else{
if (matchAll) {
if (ignoreCase) {
if (file2.getName().equalsIgnoreCase(fileName)) {
fileList.add(file2.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
} else {
if (file2.getName().equals(fileName)) {
fileList.add(file2.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
}
} else {
if (ignoreCase) {
if (file2.getName().toUpperCase().contains(
fileName.toUpperCase())) {
fileList.add(file2.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
} else {
if (file2.getName().contains(fileName)) {
fileList.add(file2.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
}
}
}
}
}
return fileList;
}