I am using Lucene 3.5.0, and have set up an index on several files. When I
use
FSDirectory, everything works fine, but when I try to implement my own
Directory implementation, I get different results. I have tried a few
implementations
and these always get the same wrong results, so I must have something wrong.
Is there a simple sample Directory implementation that works? I made a
simple
RandomAccessFile impl below.
thanks
==============
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.IndexOutput;
import org.apache.lucene.store.Lock;
public class FileDirectory extends Directory {
private File file;
private class FileIndexInput extends IndexInput {
private final RandomAccessFile raf;
private FileIndexInput(String path) throws IOException {
super(path);
raf = new RandomAccessFile(path, "r");
}
@Override
public void close() throws IOException {}
@Override
public long getFilePointer() {
try {
return raf.getFilePointer();
}
catch (IOException x) {
x.printStackTrace(System.out);
return 0;
}
}
@Override
public void seek(long pos) throws IOException {
raf.seek(pos);
}
@Override
public long length() {
try {
return raf.length();
}
catch (IOException x) {
x.printStackTrace(System.out);
return 0;
}
}
@Override
public byte readByte() throws IOException {
return raf.readByte();
}
@Override
public void readBytes(byte[] b, int offset, int len) throws
IOException {
raf.read(b, offset, len);
}
}
public FileDirectory(String path) {
file = new File(path);
}
@Override
public String[] listAll() throws IOException {
return file.list();
}
@Override
public boolean fileExists(String name) throws IOException {
return Arrays.asList(listAll()).contains(name);
}
@Override
public long fileLength(String name) throws IOException {
return new File(file.getAbsolutePath() + "/" + name).length();
}
@Override
public IndexInput openInput(String name) throws IOException {
return new FileIndexInput(file.getAbsolutePath() + "/" + name);
}
@Override
public void close() throws IOException {
}
// the following methods are not implemented since this is a read only
implementation
@Override public IndexOutput createOutput(String name) throws
IOException {
return null; }
@Override public void deleteFile(String name) throws IOException {}
@Override public void touchFile(String name) throws IOException {}
@Override public long fileModified(String name) throws IOException {
return
0; }
@Override
public Lock makeLock(String name) {
return new Lock() {
public boolean obtain() throws IOException { return true; }
public void release() {}
public boolean isLocked() { return false; }
};
}
}
--
View this message in context:
http://lucene.472066.n3.nabble.com/Directory-Implementation-problem-tp3580606p3580606.html
Sent from the Lucene - General mailing list archive at Nabble.com.