📄 testbfsfilesearch.java
字号:
import java.util.Vector;
import java.io.File;
import java.util.ArrayList;
class BFSFileSearch {
/**
* @param base File 欲查找的文件夹
* @param fileName String 需查找的文件,可含通配符,如*.java
* @param ArrayList fileList 结果集
* @param countNumber int 控制结果数量,为0,表示返回所有匹配的文件
*/
public void scanFiles(File base, String fileName, ArrayList fileList,
int count) {
Queue queue = new Queue(); // 实例化队列
queue.put(base); // 入队
while (!queue.isEmpty()) { // 判断队列为是否为空
File f = (File) queue.get(); //出队列
if (f.exists() && f.isDirectory()) {
String[] files = f.list();
if (files != null) {
for (int i = 0; i < files.length; i++) {
File f2 = new File(f, files[i]);
if (f2.isDirectory()) { // 文件夹则进队列
queue.put(f2);
} else { // 文件则进行匹配
String filePath = f2.getAbsolutePath();
filePath = filePath.substring(filePath.lastIndexOf(
"\\") + 1);
if (wildcardMatch(fileName, filePath)) { // 匹配成功
if (count != 0 && fileList.size() >= count) {
return;
}
fileList.add(f2.getAbsoluteFile()); // 添加到结果集
}
}
} //for结束
} //if( files != null )结束
} //if( f.exists() && f.isDirectory() )结束
} //while结束
} //scanFiles方法结束
public boolean wildcardMatch(String pattern, String string) {
int stringLength = string.length();
int stringIndex = 0;
for (int patternIndex = 0; patternIndex < pattern.length();++patternIndex)
{
char c = pattern.charAt(patternIndex);
if (c == '*') {
while (stringIndex < stringLength) {
if (wildcardMatch(pattern.substring(patternIndex + 1),
string.substring(stringIndex))) {
return true;
}
++stringIndex;
} // while结束
} else if (c == '?') {
++stringIndex;
if (stringIndex > stringLength) {
return false;
}
} else {
if (stringIndex >= stringLength ||
c != string.charAt(stringIndex)) {
return false;
}
++stringIndex;
}
} // for结束
return stringIndex == stringLength;
} // wildcardMatch方法结束
} // 类BFSFileSearch结束
// 声明队列类
class Queue {
private Vector vector = new Vector();
public void put(Object object) { //入队
vector.addElement(object);
}
public Object get() { //出队
Object object = peek();
if (object != null) {
vector.removeElementAt(0);
}
return object;
}
public Object peek() { //取队首元素
if (isEmpty()) {
return null;
}
return vector.elementAt(0);
}
public boolean isEmpty() { //队列是否为空
return vector.isEmpty();
}
public int size() { //队列大小
return vector.size();
}
} // 类queue结束
public class TestBFSFileSearch {
public static void main(String[] paramert) {
File file = new File("C:/Hello"); // 在C:/Hello下查找
ArrayList fileList = new ArrayList(); // 声明数组链表变量
String fileName = "*.java"; // 查找java源程序
int countNumber = 5; // 最多返回结果数, 为0则返回全部
BFSFileSearch search = new BFSFileSearch(); // 声明BFSFileSearch实例
search.scanFiles(file, fileName, fileList, countNumber); // 执行查找
for (int i = 0; i < fileList.size(); i++) { // 显示查找结果
System.out.println(fileList.get(i));
}
if (fileList.size() == 0) {
System.out.println("No File Found.");
}
}// main方法结束
} // 类TestBFSFileSearch结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -