在java中创建一个文本文件的简单索引

vja*_*n27 2 java indexing file-io

我需要为一个大文本文件实现一个简单的索引方案.文本文件包含键值对,我需要回读一个特定的键值对而不在内存中加载完整的文件.文本文件很大,包含数百万个条目,并且密钥未排序.根据用户输入,需要读取不同的键值对.所以我不希望每次都读取完整的文件.请让我知道java文件处理api中的确切类和方法,这将有助于以简单有效的方式实现它.我想在不使用外部库(如lucene)的情况下执行此操作.

DJC*_*rth 5

正如评论所指出的那样,在最坏的情况下,你需要对整个文件进行线性搜索,平均需要一半.但幸运的是,你可以做一些技巧.

如果文件没有太大变化,则创建一个文件的副本,在该文件中对条目进行排序.理想情况下,在副本中创建相同长度的记录,以便您可以直接转到已排序文件中的第N个条目.

如果没有磁盘空间,则创建一个索引文件,该文件将原始文件中的所有键作为键,并将原始文件中的键作为值.再次使用固定长度记录.或者更好,将此索引文件设为数据库.或者将原始文件加载到数据库中.在任何一种情况下,磁盘存储都非常便宜.

编辑:要创建索引文件,请使用RandomAccessFile打开主文件并按顺序读取.在每个条目的开头使用'getFilePointer()'方法来读取文件中的位置,并将该密钥存储在索引文件中.查找某些内容时,请从索引文件中读取文件指针,并使用"seek(long)"方法跳转到原始文件中的某个点.