Как отмечалось в комментариях, вам потребуется выполнить линейный поиск по всему файлу в худшем случае, а в среднем по половине.Но, к счастью, есть некоторые хитрости, которые вы можете сделать.
Если файл не сильно меняется, то создайте копию файла, в котором отсортированы записи.Идеально делать записи в копии одинаковой длины, чтобы можно было сразу перейти к N-й записи в отсортированном файле.
Если для этого нет места на диске, то создайте индексный файл, которыйимеет все ключи в исходном файле в качестве ключа и смещение в исходном файле в качестве значения.Снова используются записи фиксированной длины.Или лучше сделать этот индексный файл базой данных.Или загрузите оригинальный файл в базу данных.В любом случае, дисковое хранилище очень дешево.
РЕДАКТИРОВАТЬ: Чтобы создать индексный файл, откройте основной файл с помощью RandomAccessFile и последовательно прочитайте его.Используйте метод getFilePointer () в начале каждой записи, чтобы прочитать позицию в файле и сохранить ее плюс ключ в индексном файле.При поиске чего-либо прочитайте указатель файла из индексного файла и используйте метод seek (long), чтобы перейти к точке в исходном файле.