Хотя, как сказано в других ответах, невозможно получить точную строку, не зная смещения (указателя) раньше.Итак, я добился этого, создав временный индексный файл, в котором будут храниться значения смещения каждой строки.Если файл достаточно мал, вы можете просто сохранить индексы (смещение) в памяти, не требуя для этого отдельного файла.
The offsets can be calculated by using the RandomAccessFile
RandomAccessFile raf = new RandomAccessFile("myFile.txt","r");
//above 'r' means open in read only mode
ArrayList<Integer> arrayList = new ArrayList<Integer>();
String cur_line = "";
while((cur_line=raf.readLine())!=null)
{
arrayList.add(raf.getFilePointer());
}
//Print the 32 line
//Seeks the file to the particular location from where our '32' line starts
raf.seek(raf.seek(arrayList.get(31));
System.out.println(raf.readLine());
raf.close();
Также посетите документацию по Java для получения дополнительной информации: https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html#mode
Сложность : Это O (n), поскольку он читает весь файл один раз.Пожалуйста, помните о требованиях к памяти.Если он слишком большой, чтобы находиться в памяти, создайте временный файл, в котором вместо ArrayList будут храниться смещения, как показано выше.
Примечание : если все, что вы хотите в строке '32', выпросто нужно вызвать readLine (), также доступную через другие классы, 32 раза.Приведенный выше подход полезен, если вы хотите получить определенную строку (на основе номера строки, конечно) несколько раз.
Спасибо!