我现需要遍历一个文件夹内所有的txt文件(该文件夹里有二级、三级文件夹和文件)用递归来写的,如图
//开始遍历路径
File[] files = dir.listFiles();
Analyzer  analyzer    = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(directory, analyzer, true);
for(int i = 0; i < files.length; i++){
String filePath_index = files[i].getCanonicalPath();//获得索引文件绝对地址
if  (files[i].isFile()      
&&  (files[i].getName().endsWith( ".txt" ) ){   Document document = new Document();  Reader txtReader = new FileReader(files[i]); 
document.add(new Field("path",filePath_index,Field.Store.YES,Field.Index.NO)); 
document.add(new Field("contents",txtReader));  indexWriter.addDocument(document); //断点第二次进入这里(二级文件夹遍历时)就挂掉了 }//是txt文件的情况


}

for(int i = 0; i < files.length; i++){
if (files[i].isDirectory()){
scanFile=files[i].getCanonicalPath();
createIndex();
}// 是文件夹的情况
}
indexWriter.optimize();
indexWriter.close();
return true;但是断点每次进入二级文件夹的indexWriter.addDocument(document);到这步就停掉了查了下,好像是不能多次的建索引(更新索引)
求解决办法
我用的是2.9.4版本

解决方案 »

  1.   

    private  void indexDirectory(IndexWriter writer, File dir)
    throws Exception {
    File[] files = dir.listFiles();
    for (int i = 0; i < files.length; i++) {
    File f = files[i];
    if (f.isDirectory()) {
    indexDirectory(writer, f);
    } else if (f.getName().endsWith(".txt")
    ||f.getName().endsWith(".html")
    ||f.getName().endsWith(".shtml")
    ||f.getName().endsWith(".htm")) {
    indexFile(writer, f);
    }
    }
    }可以试下这种写法
      

  2.   

    楼上的写法,就直接进入二级文件夹遍历而跳过1级文件夹里的txt了
    而且也没解决索引不能重复写(更新)的问题继续坐等
      

  3.   

    lucene楼主还没搞明白
    更新索引或新建索引是在indexwriter中定义的
      

  4.   

    我按你的测试过了
    第二次循环到
    indexWriter.addDocument(document);依然不行不知道咋办了 
      

  5.   

    我搞好了,非常yaoweijq
    我之前没搞清楚writer