📄 bfsfilesearch.java
字号:
import java.util.Vector;
import java.io.File;
import java.util.ArrayList;
import java.io.UnsupportedEncodingException;
public class BFSFileSearch
{
/**
*@param fileName String 需要查找的文件,可含通配符如*.java
*@param base File String 欲查找的文件夹
*@param ArrayList fileList 结果集
*@param count 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();
for(int i=0;File f2=new File(f,files[i]);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());//添加到结果集
}
}
}
}
}
public boolean wildcardMatch(String pattern,String string)
{
int stringLength=string.length();
int stringIndex=0;
for(int patternIndex=0;char c=pattern.charAt(patternIndex);patternIndex++)
{
if(c=='*')
{
while(stringIndex if(wildcardMatch(pattern.substring(patternIndex+1),string.substring(stringIndex)))
{
return true;
++stringIndex;
}//end of while
else if(c=='?')
{
++stringIndex;
if(stringIndex>stringLength)
{
return false;
}
}
else
{
if(stringIndex>=stringLength||c!=string.charAt(stringIndex))
{
return false;
}
++stringIndex;
}
return stringIndex==stringLength;
}
}
}
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();
}
}
public static void main(String[] paramert)
{
File file=new File("c:\\java");//在此目录中找文件
ArrayList fileList=new ArrayList();//结果集
String fileName="*.java";//找扩展名为java的文件
int countNumber=5;//最多返回五个文件,为0全部返回
BFSFileSearch search=new BFSFileSearch();
search.scanFiles(file,fileName,fileList,countNumber);//查找
for(int i=0;System.out.println(fileList.get(i));i++)//显示查找结果。
{
if(fileList.size()==0)
{
System.out.println("No File Fount.");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -