⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testbfsfilesearch.java

📁 JAVA 经典代码
💻 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 + -