2012-02-13 46 views
2

我已經編寫了一個在Netbeans和Eclipse中編譯和運行的程序,沒有任何問題。但是,當我嘗試通過編譯命令行:Java程序使用或覆蓋棄用的API?

javac -classpath .:lucene-core-3.4.0.jar Indexer.java 

我得到的錯誤:

Note: Indexer.java uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 

當我試着使用-Xlint進行編譯:棄用選項獲得:

javac -classpath .:lucene-core-3.4.0.jar Indexer.java -Xlint:deprecation 
Indexer.java:14: warning: [deprecation] org.apache.lucene.index.IndexWriter.MaxFieldLength in org.apache.lucene.index.IndexWriter has been deprecated 
import org.apache.lucene.index.IndexWriter.MaxFieldLength; 
             ^
1 warning 

我的源代碼似乎是純粹的,沒有任何問題!任何人都可以幫助我編譯和運行它在命令行?

代碼

import java.io.File; 
import java.io.FileFilter; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.File; 
import java.io.FileReader; 
import java.io.BufferedReader; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.index.IndexWriter.MaxFieldLength; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.store.RAMDirectory; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.analysis.StopAnalyzer; 
import org.apache.lucene.index.IndexReader; 
import org.apache.lucene.store.Directory; 
import org.apache.lucene.store.FSDirectory; 
import org.apache.lucene.util.Version; 
import org.apache.lucene.index.TermFreqVector; 

public class Indexer { 

    public static void main(String[] args) throws Exception { 
     // TODO code application logic here 

     //Indexing begins 
      String indexDir; 
      String dataDir; 
      if (args.length != 2) { 
        dataDir = new String("/home/norc/Ranking/Hamshahri/Data/"); 
        indexDir = new String("/media/5E62D9BD62D99A5B/indexes/"); 
      //throw new IllegalArgumentException("Usage: java " + Indexer.class.getName() + " <index dir> <data dir>"); 
     } 
       else { 
        dataDir = args[0]; 
        indexDir = args[1]; 
       } 
     long start = System.currentTimeMillis(); 
     Indexer indexer = new Indexer(indexDir); 
     int numIndexed; 
     try { 
      numIndexed = indexer.index(dataDir, new TextFilesFilter()); 
     } finally { 
      indexer.close(); 
     } 
     long end = System.currentTimeMillis(); 
     System.out.println("Indexing " + numIndexed + " files took " + (end - start) + " milliseconds"); 

    } 

    private IndexWriter writer; 

    @SuppressWarnings("deprecation") 
    public Indexer(String indexDir) throws IOException { 
     Directory dir = FSDirectory.open(new File(indexDir)); 
     writer = new IndexWriter(dir, 
      new StopAnalyzer(Version.LUCENE_34, new File("/home/norc/Ranking/Hamshahri/stopwords.txt")), 
      true, 
      IndexWriter.MaxFieldLength.UNLIMITED); 
    } 

    public void close() throws IOException { 
     writer.close(); 
    } 

    public int index(String dataDir, FileFilter filter) throws Exception { 
     File[] dires = new File(dataDir).listFiles(); 
     for (File d: dires) { 
      if (d.isDirectory()) { 
      File[] files = new File(d.getAbsolutePath()).listFiles(); 
      for (File f: files) { 
       if (!f.isDirectory() && 
       !f.isHidden() && 
       f.exists() && 
       f.canRead() && 
       (filter == null || filter.accept(f))) { 
        indexFile(f); 
       } 
      } 
      } 
     } 
     return writer.numDocs(); 
    } 

    private static class TextFilesFilter implements FileFilter { 
     public boolean accept(File path) { 
      return path.getName().toLowerCase().endsWith(".txt"); 
     } 
    } 


    protected Document getDocument(File f) throws Exception { 
     Document doc = new Document(); 
     if (f.exists()) { 
     doc.add(new Field("contents", new FileReader(f), Field.TermVector.YES)); 
     doc.add(new Field("path", f.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 
     String cat = "WIR"; 
     cat = f.getAbsolutePath().substring(0, f.getAbsolutePath().length()-f.getName().length()-1); 
     cat = cat.substring(cat.lastIndexOf('/')+1, cat.length()); 
     //doc.add(new Field("category", cat.subSequence(0, cat.length()), Field.Store.YES)); 
     //System.out.println(cat.subSequence(0, cat.length())); 
     } 
     return doc; 
    } 

    private void indexFile(File f) throws Exception { 
     System.out.println("Indexing " + f.getAbsolutePath()); 
     Document doc = getDocument(f); 
     writer.addDocument(doc); 
    } 

} 
+3

我不認爲這是一個錯誤,它只是一個警告。你仍然可以編譯和運行你的代碼 – 2012-02-13 09:21:13

+1

這是一個警告,而不是一個錯誤...... netbeans或eclipse會告訴你警告(在eclipse中該行以黃色下劃線)......這並不意味着編譯沒有意義, t成功... – Vinze 2012-02-13 09:21:49

+0

但我無法運行它! – orezvani 2012-02-13 09:47:01

回答

5

org.apache.lucene.index.IndexWriter.MaxFieldLength已被棄用,不應該使用更多的,請參閱https://lucene.apache.org/core/old_versioned_docs/versions/3_4_0/api/all/org/apache/lucene/index/IndexWriter.MaxFieldLength.html#IndexWriter.MaxFieldLength%28int%29

這只是一個警告。您可以使用它,但不推薦。

+0

但我無法運行它! – orezvani 2012-02-13 09:49:53

+0

你已經試過了嗎? http://stackoverflow.com/questions/1858021/suppress-deprecated-import-warning-in-java – jpstrube 2012-02-13 11:37:12

+0

是的,如果你看看我的代碼,你會看到@SuppressWarnings(「deprecation」) 我想我沒有支付關注類文件。我只是跑了那個課文件,一切都很好!順便說一句,謝謝你幫助我;) – orezvani 2012-02-16 19:21:42

相關問題