我正在为我的文本分析项目运行lucene库(我对java比较新)。主要功能(或命令)有问题。
我使用的lucene版本是3.0.0,并且已经编译成JAR文件。 JAR文件与主类文件Indexer.java位于同一文件夹中。
我首先运行编译代码:
javac -cp \lucene-core-3.0.0.jar Indexer.java
并且它正常工作并在同一目录中创建了Indexer.class文件。
然后我运行相同的命令:
java -cp \lucene-core.3.0.0.jar Indexer
这次命令行输出显示我没有主类Indexer:
could not find or load main class Indexer
我检查了原始java代码,定义了主要方法:
import org.apache.lucene.index.*;
import java.io.IOException;
import java.io.File;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.util.Version;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import java.io.FileReader;
public class Indexer {
private IndexWriter writer;
private void indexFile(File f) throws Exception{
System.out.println("Indexing " + f.getCanonicalPath());
Document doc = getDocument(f);
if(doc != null){
writer.addDocument(doc);
}
}
public Indexer(String IndexDir) throws IOException{
Directory dir = FSDirectory.open(new File(IndexDir));
writer = new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_30),
true,IndexWriter.MaxFieldLength.UNLIMITED);
}
protected Document getDocument(File f) throws Exception{
Document doc = new Document();
doc.add(new Field("contents", new FileReader(f)));
doc.add(new Field("filename",
f.getName(),
Field.Store.YES,
Field.Index.NOT_ANALYZED));
doc.add(new Field("fullpath",
f.getCanonicalPath(),
Field.Store.YES,
Field.Index.NOT_ANALYZED));
return doc;
}
protected boolean acceptFile(File f){
return f.getName().endsWith(".txt");
}
public int index(String dataDir) throws Exception{
File[] files = new File(dataDir).listFiles();
for(int i = 0; i < files.length;i++){
File f = files[i];
if(!f.isDirectory()
&& !f.isHidden()
&& f.exists()
&& f.canRead()
&& acceptFile(f)){
indexFile(f);
}
}
return writer.numDocs();
}
public void close() throws IOException{
writer.close();
}
public static void main(String[] args) throws Exception{
if(args.length != 2){
throw new Exception("Usage: java " + Indexer.class.getName()+" <index dir><data dir");
}
String indexDir = args[0];
String dataDir = args[1];
long start = System.currentTimeMillis();
Indexer indexer = new Indexer(indexDir);
int numIndexed = indexer.index(dataDir);
indexer.close();
long end = System.currentTimeMillis();
System.out.println("Indexing " +
numIndexed + " files took " + (end-start)+ " milliseconds.");
}
}
我的代码/命令出了什么问题?
答案 0 :(得分:0)
当显式指定jvm时,jvm不包括运行时类路径中的当前目录。尝试
java -cp ".:lucene-core.3.0.0.jar" Indexer