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

📄 ruse.java

📁 一个用于搜索本地文件内容的小型搜索引擎
💻 JAVA
字号:
package main;
import invertedList.FileRecord;
import invertedList.IFileManagement;
import invertedList.IQueryResult;
import invertedList.InvertedListManager;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import queries.IQueryManagement;
import queries.QueryManager;

/**
 * @author Administrator
 *	a facade to the system. making the system easy to use.
 *	only provide several common methods.
 */
public class RUSE {
	/**
	 * a instance of a invertedListManager
	 */
	private IFileManagement fileManager;
	/**
	 * a instance to create query
	 */
	private IQueryManagement queryManager;
	
	public RUSE(){
		fileManager = InvertedListManager.getInstance();
		queryManager = new QueryManager();
	}
	
	/**
	 * @param dataDir
	 * @param indexDir
	 * index the files in the datadir, and save the index files to indexDir
	 */
	public void indexFile(File dataDir,File indexDir){
		if(!dataDir.exists()){
			System.out.println("Data directory is not exist. Please check...");
			return;
		}
		if(dataDir.isDirectory()){				
			fileManager.addFiles(dataDir.listFiles());	
			fileManager.saveIndexFile(indexDir);//currently written in this style
		}
		else{
			fileManager.addFile(dataDir);
		}
	}
	
	/**
	 * @param filenames
	 * @param indexDir
	 * index several files using indexFile method
	 */
	public void indexFile(File[] filenames,File indexDir){
		for(int i = 0;i < filenames.length;i++){
			indexFile(filenames[i],indexDir);
		}
		fileManager.saveIndexFile(indexDir);
	}
	
	/**
	 * @param str
	 * @return
	 * get the result of a query string
	 */
	public List<FileRecord> getResult(String str){
		return new ArrayList<FileRecord>(queryManager.createQuery(str).doQuery((IQueryResult)fileManager));
	}
	
	/**
	 * @param str
	 * @return
	 */
	public List<FileRecord> getResultBySize(String str){
		List<FileRecord> result = new ArrayList<FileRecord>(queryManager.createQuery(str).doQuery((IQueryResult)fileManager));
		Collections.sort(result, new SizeComparator());
		return result;
	}
	
	/**
	 * @param str
	 * @return
	 */
	public List<FileRecord> getResultByTime(String str){
		List<FileRecord> result = new ArrayList<FileRecord>(queryManager.createQuery(str).doQuery((IQueryResult)fileManager));
		Collections.sort(result, new ModTimeComparator());
		return result;
	}
	
	/**
	 * @param indexDir
	 * load the index from the indexDir
	 */
	public void loadIndexFile(File indexDir){
		fileManager.loadIndexFile(indexDir,false);
	}
	
	/**
	 * @param str
	 * @param num
	 * @return
	 * num is the number of results that you want a time.
	 */
	public Iterator<List<FileRecord>> getResultsIncrementally(String str,int num){
		List<FileRecord> result = new ArrayList<FileRecord>(queryManager.createQuery(str).doQuery((IQueryResult)fileManager));
		return SearchResultSet.createIterator(result, num);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -