final class SegmentInfos extends Vector
可以看出该类实际上是一个Vector 以及封装了对该Vevtor的一些操作
实际上封装的是对segments文件的一些读写操作
先来看下segments文件的格式
segments文件的格式:
int: =-1 文件是否是Lucene合法的文件格式正常情况下为 -1
long: 版本号,每更新一次该文件将会将版本号加1
int: 用来命名新段
int: 段的数目
String + int 段的信息 String是段的名称 int是段中所含的doc数目
String + int 同上
所以用Lucene的API,我们可以简单的打印出其segments的所有信息
try {
//DataInputStream fis = new DataInputStream(new FileInputStream("C:\\sf\\snow\\segments"));
FSDirectory dir=FSDirectory.getDirectory("C:/sf/snow", false);
InputStream input = dir.openFile("segments");
System.out.println("Format:"+input.readInt()); //得到文件标志,是否为正常的segments文件
System.out.println("version:"+input.readLong()); //得到版本号
System.out.println("name:"+input.readInt()); //得到用来重命名新段的int,暂时不知道有什么用
int n=input.readInt(); //段的数目
System.out.println("SegmentNum:"+n);
for(int i=0;i<n;i++) { //用循环打印出所有段的信息 名称和长度
System.out.println("segment "+i+" - name:"+input.readString()+" num:"+input.readInt());
}
} catch (Exception e) {
}
当然,该类提供了更为复杂的访问和更新segments文件的方法
final void read(Directory directory) 将所有的段信息保存在本vector中
final void write(Directory directory) 跟新该segment文件的内容,主要是为了添加段,
主要是更新 版本号 段的数目,跟新完这些后即可往segment文件后添加新段的信息。