建立磁盘文件索引的源代码 80

c、c++、java、php都可以,c#勉强也可以。要求就是建立一个磁盘的所有文件的索引,用于搜索。这个索引不用太具体,只包括文件的路径加上文件名就可以了。比如:输入“L... c、c++、java、php都可以,c#勉强也可以。
要求就是建立一个磁盘的所有文件的索引,用于搜索。
这个索引不用太具体, 只包括文件的路径加上文件名就可以了。
比如:输入“L:\”
就可以生成L盘所有文件的索引的文件了。
注意,是整个磁盘,文件巨多,一个容器是装不下的。
额,忘了,除了文件名还有文件的大小
展开
 我来答
超人影视娱乐
高粉答主

2015-08-23 · 闲来无事的影评人-关注我把
超人影视娱乐
采纳数:7757 获赞数:60597

向TA提问 私信TA
展开全部
package test;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

public class Indexer {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //创建索引文件和要索引文件所在的目录
  File indexDir = new File(Constants.INDEX_STORE_PATH);//调用Constants中的常量
  File dataDir = new File(Constants.INDEX_FILE_PATH);
  //获取建立索引开始的时间
  long start =new Date().getTime();
  int numIndexed = 0;
  try {
   numIndexed = index(indexDir,dataDir);返回要索引文件的数量
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  long end = new Date().getTime();
  System.out.print("Indexing"+ numIndexed + "files took" 
    + (end - start) + "milliseconds");//计算整个索引过程所需要的时间
  
 }
 private static int index(File indexDir, File dataDir) throws IOException{
  // TODO Auto-generated method stub
  if(!dataDir.exists() || !dataDir.isDirectory())
  {
   throw new IOException(dataDir + "does not exit or" +
     "is not a directory");
  }
  //第一个参数是索引文件存放目录,第二个参数是分析器(可选),第三个参数确定是否
 
  覆盖原有索引,建立此对象对索引进行写操作。
  IndexWriter writer = new IndexWriter(indexDir,new StandardAnalyzer(),true);
  writer.setUseCompoundFile(false);//使用复合文件?  indexDirectory(writer,dataDir);  int numIndexed = writer.docCount();  writer.optimize();//进行优化  writer.close();//关闭writer对象  return numIndexed; }
//对文件夹和文件查找遍历。
 private static void indexDirectory(IndexWriter writer, File dataDir)
  throws IOException{
  // TODO Auto-generated method stub
  File[] files = dataDir.listFiles();
  for(int i = 0;i  {
   File f = files[i];
   if(f.isDirectory())
   {
    indexDirectory(writer,f);
   }
   else if(f.getName().endsWith(".txt"))
   {
    indexFile(writer,f);
   }
  }
  
 }
 private static void indexFile(IndexWriter writer, File f) throws IOException{
  // TODO Auto-generated method stub
  if(f.isHidden() || !f.exists() || !f.canRead())
  {
   return;
  }
  System.out.println("Indexing" + f.getCanonicalPath());
//最主要的部分
  Document doc = new Document();
  Field fieldContents = new Field("contents", new FileReader(f));//得到文本的内容域
  doc.add(fieldContents);
  Field fieldName = new Field("name",f.getCanonicalPath(),Field.Store.YES,Field.Index.UN_TOKENIZED);//得到文本的
路径名称,不同的内容会有不同的操作方法(四种)
  doc.add(fieldName);
  writer.addDocument(doc);
 }
}
追问
你这个是遍历吧?能不能用算法写出来啊?而且这个容器你就用了1个,根本无法处理更多的目录啊
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式