2013-09-01 33 views
0

我試圖使用Lucene索引文件。不過我得到一個StreamClosed例外..流閉合異常,同時增加了第二次

我認爲它更多地涉及的Java然後Lucene的....

有人可以請指導.. 的代碼片段如下:

static void indexDocs(File file,boolean flag,Directory dir,IndexWriterConfig iwc) 
    throws IOException { 
    // do not try to index files that cannot be read 

     FileInputStream fis = null; 
if (file.canRead()) { 

    if (file.isDirectory()) 
    { 

    String[] files = file.list(); 
    System.out.println("list " + files.length); 
     if (files != null) { 
     for (int i = 0; i < files.length; i++) { 
      System.out.println("Invoked for " + i + "and " + files[i]);    
      indexDocs(new File(file, files[i]),flag,dir,iwc); 
     } 
     } 
    } 
    else { 

     boolean flags=true; 

     try { 
     fis = new FileInputStream(file); 

    } catch (FileNotFoundException fnfe) { 

     fnfe.printStackTrace(); 
    } 
     try { 
      Document doc = new Document();   

      LineNumberReader lnr=new LineNumberReader(new FileReader(file)); 

      Field pathField = new StringField("path", file.getPath(), Field.Store.YES); 
      doc.add(pathField); 


      String line=null; 
      int i=0;  

      doc.add(new StringField("TT",file.getName(),Field.Store.YES)); 

      BufferedReader br=new BufferedReader(new InputStreamReader(fis)); 

      doc.add(new TextField("DD", br)); 

      System.out.println("Looping Again"); 

      while(flags) 
      {      
       IndexWriter iwcTemp1=new IndexWriter(dir,iwc); 

      while(null != (line = lnr.readLine())){ 

      i++; 

      StringField sf=new StringField("EEE",line.trim(),Field.Store.YES); 
      doc.add(sf); 

      if(i%10000==0) 
      {  
       System.out.println("Breaking " + i); 
       lnr.mark(i); 
       break; 
      }    
      sf=null; 
      }   
      if(line==null) 
      { 
       System.out.println("FALSE " ); 
       flags=false; 
      }    

      System.out.println("FILE NAME IS FTP " + file.getName()); 


      if (iwcTemp1.getConfig().getOpenMode() == OpenMode.CREATE_OR_APPEND) { 

       try 
       {    
       iwcTemp1.addDocument(doc); 
       iwcTemp1.commit();          
       iwcTemp1.close(); 

       }catch(Throwable t) 
       { 
        lnr.close(); 
        br.close(); 
        fis.close(); 
        t.printStackTrace(); 
       } 

      } else { 
       try 
       { 

      System.out.println("updating " + file); 
      iwcTemp1.updateDocument(new Term("path", file.getPath()), doc); 
       }catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
      }   
      System.out.println("END OF WHILE"); 
      lnr.reset(); 
      }//end of While 
     }catch (Exception e) { 
     e.printStackTrace(); 
     }finally { 
     fis.close(); 
     } 
    } 
    } 
} 

例外,我得到的是在哪裏我添加文件到作家行... 異常跟蹤:

java.io.IOException: Stream closed 
     at java.io.BufferedReader.ensureOpen(BufferedReader.java:114) 
     at java.io.BufferedReader.read(BufferedReader.java:270) 
     at org.apache.lucene.analysis.standard.StandardTokenizerImpl.zzRefill(StandardTokenizerImpl.java:923) 
     at org.apache.lucene.analysis.standard.StandardTokenizerImpl.getNextToken(StandardTokenizerImpl.java:1133) 
     at org.apache.lucene.analysis.standard.StandardTokenizer.incrementToken(StandardTokenizer.java:171) 
     at org.apache.lucene.analysis.standard.StandardFilter.incrementToken(StandardFilter.java:49) 
     at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:102) 
     at org.apache.lucene.index.DocFieldProcessor.processDocument(DocFieldProcessor.java:245) 
     at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:265) 
     at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:432) 
     at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1513) 
     at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1188) 
     at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1169) 
     at com.rancore.MainClass2.indexDocs(MainClass2.java:236) 

可有人請引導......我要去哪裏錯了......請......引導

回答

0

你的異常處理不當的結構。如果新的FileInputStream()拋出異常,應該不可能繼續讀取代碼。

+0

嗯,我知道異常處理沒有正確完成,因爲我還沒有做到這一點......我關注流關閉異常...... – AngelsandDemons

+0

因此,修復你的代碼。目前,如果您在開放時發生異常,您將繼續進行閱讀並獲得例外。如果你修復你的異常處理,它不會發生。正確的異常處理不是可選的,或者是之後你所需要的。這是您程序設計的重要組成部分。首先,它可以防止自己造成的錯誤從頭到尾發生。 – EJP

+0

您可能不會關閉作者。爲什麼只在CREATE_OR_APPEND上關閉書寫器... IndexWriterConfig的創建超出了片段的範圍。 (順便說一句,很難閱讀/理解您的代碼...) – nomoa

相關問題