本来打算自己总结的,看见有篇现成的,转载如下:
首先我们看构造函数中的第一个类Directory 类。根据这个类的英文,我们能得出这个类就是关于目录操作的。Directory 是一个抽象类。其有4个子类,分别是:DbDirectory, FSDirectory, JEDirectory, RAMDirectory
首先我们看看Directory 的类
public abstract class Directory {
volatile boolean isOpen = true;
/*** 持有一个LockFactory的实例(实现锁定这个目录实例)*/
protected LockFactory lockFactory;
/**返回该目录下的所有文件数组.如果这个目录下没有文件存在,或者存在权限问题不能访问,该方法可能返回Null*/
public abstract String[] list() throws IOException;
/** * 返回指定名称的文件是不是存在 */
public abstract boolean fileExists(String name)
throws IOException;
/**返回指定名称的文件最后修改的时间
public abstract long fileModified(String name) throws IOException;
/**设置指定文件名的文件最后的修改时间为当前时间*/
public abstract void touchFile(String name) throws IOException;
/**删除指定文件。 */
public abstract void deleteFile(String name)throws IOException;
/**返回指定文件的长度。 */
public abstract long fileLength(String name) throws IOException;
/** 在当前目录下使用给定的名称创建一个空的文件。并且返回一个流来写该文件。*/
public abstract IndexOutput createOutput(String name) throws IOException;
/** * Lucene使用该方法确保所有的针对该文件的写操作都会存储到Index。并且阻止machine/OS发生故障 破坏该index。*/
public void sync(String name) throws IOException {}
/**获取已经存在的一个文件的IndexInput流操作该文件。 */
public abstract IndexInput openInput(String name) throws IOException;
/** 返回已经存在的一个文件、并且使用指定大小的缓冲的IndexInput,但是当前目录也可能忽略该缓冲池的大小,
* 当前主要是考虑CompoundFileReader和FSDirectory对于次参数的需求。*/
public IndexInput openInput(String name, int bufferSize) throws IOException {
return openInput(name);
}
/** 创建一个指定名称的锁/
public Lock makeLock(String name) {
return lockFactory.makeLock(name);
}
/**
* 清除指定的锁定(强行解锁和删除)这不仅要求在这个时候当前的锁一定不在使用。 */
public void clearLock(String name) throws IOException {
if (lockFactory != null) {
lockFactory.clearLock(name);
}
}
/** 结束这个store. */
public abstract void close() throws IOException;
/**设置LockFactory,此目录实例应使其锁定执行。每个LockFactory实例只用于一个目录(即,不要共用一个实例在多个目录) */
public void setLockFactory(LockFactory lockFactory) {
this.lockFactory = lockFactory;
lockFactory.setLockPrefix(this.getLockID());
}
/** 获得LockFactory,此目录例实例使用其锁定执行。请注意,这可能是无效的目录执行,提供自己锁执行*/
public LockFactory getLockFactory() {
return this.lockFactory;
}
/**过去锁实例的唯一表示ID的字符串描述*/
public String getLockID() {
return this.toString();
}
/**// 拷贝源目录src下的文件,复制到目的目录dest下面,拷贝完成后关闭源目录src*/
public static void copy(Directory src, Directory dest, boolean closeDirSrc) throws IOException {
final String[] files = src.list();
if (files == null)
throw new IOException("cannot read directory " + src + ": list() returned null");
byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
IndexOutput os = null;
IndexInput is = null;
try {
// create file in dest directory
os = dest.createOutput(files[i]);
// read current file
is = src.openInput(files[i]);
// and copy to dest directory
long len = is.length();
long readCount = 0;
while (readCount < len) {
int toRead = readCount + BufferedIndexOutput.BUFFER_SIZE > len ? (int)(len - readCount) : BufferedIndexOutput.BUFFER_SIZE;
is.readBytes(buf, 0, toRead);
os.writeBytes(buf, toRead);
readCount += toRead;
}
} finally {
// graceful cleanup
try {
if (os != null)
os.close();
} finally {
if (is != null)
is.close();
}
}
}
if(closeDirSrc)
src.close();
}
从Directory抽象类的定义,我们可以得到如下几点:
1、管理锁工厂及其锁实例;
2、管理Directory目录实例的基本属性,主要是通过文件名称进行管理;
3、管理与操作该目录相关的一些流对象;
4、管理索引文件的拷贝。
转自:http://www.blogjava.net/guming123416/archive/2009/04/16/266008.html
分享到:
相关推荐
lucene3.0.3搜索的使用示例lucene3.0.3搜索的使用示例lucene3.0.3搜索的使用示例
盘古分词 lucene3.0.3 使用 示例 可以方便地整合到项目中使用,.net 4.0的。有分页功能。新加根据分类索引功能。
Apache Lucene.Net 3.0.3 just passed a vote for release - our first official release since graduating from the incubator in August. A lot of work was put into porting and testing the code. We've ...
盘古分词 lucene3.0.3 使用 示例 可以方便地整合到项目中使用,.net 4.0的。
lucene3.0.3.core.jar文件,不用到apache官方网站下载17M的包,直接下载这个core就可以了。
Lucene 3.0.3 API Lucene 3.0.3 Lucene
盘古分词 lucene3.0.3 使用 示例 可以方便地整合到项目中使用,.net 4.0的。新加分页功能。
lucene3.0.3源码和教程
Lucene3.0.3+盘古分词的实现用到的dll文件,带词库文件。已证实可用,可指定使用自己维护后的词库文件。
Lucene是一个基于Java的全文索引工具包。
lucene3源码分析
适合练手、课程设计、毕业设计的Java项目源码:公交搜索系统(java结合lucene).rar 适合练手、课程设计、毕业设计的Java项目源码:公交搜索系统(java结合lucene).rar 适合练手、课程设计、毕业设计的Java项目源码...
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
Lucene.Heritrix:开发自己的搜索引擎(第2版).邱哲.扫描版 Lucene.Heritrix:开发自己的搜索引擎(第2版).邱哲.扫描版
整理开发Lucene+盘古分词 开发搜索引擎用到的所有必备资源 亲测可用
Lucene3.0分词系统.doc
Lucene3.5全部源码,打包jar文件,可以直接打开查看源码,Lucene开发必备
赠送jar包:lucene-sandbox-6.6.0.jar; 赠送原API文档:lucene-sandbox-6.6.0-javadoc.jar; 赠送源代码:lucene-sandbox-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-sandbox-6.6.0.pom; 包含翻译后的API...
Lucene学习源码.rar
Lucene.net 搜索引擎 Lucene.net源码 Lucene.net中文文档; 好的东西需要分享