читать до определенного индекса в файле с java RandomAccessFile - PullRequest
0 голосов
/ 17 января 2019

Я пытался прочитать из файла между двумя конкретными индексами, используя RandomAccessFile.

Я знаю, что могу перейти к индексу с помощью функции seek(), но я не смог найти ответ, как читать текст из файла до определенного индекса.

Например, у меня есть огромный файл, и я хочу прочитать текст из индекса 100 в индекс 500, я бы начал так:

public String get_text(){
   raf.seek(100) //raf= my RandomAccessFile
   String txt=raf.read(500) //read until index 500 which i don't know how to do
   return txt;
}

Пожалуйста, помогите мне:)

1 Ответ

0 голосов
/ 22 марта 2019

Вот как я решил свою проблему:

try {
    int index = 100;
    raf.seek(index); //index = 100
    int counter = 0;
    int length = 400;
    while (counter < length) { //want to read the characters 400 times
       char c = (char) raf.read();
       if (!(c == '\n')) {   //don't append the newline character to my result
           sb.append(c);    //sb is a StringBuilder
           counter++;
       }
    }
} catch (IOException e) {
    e.printStackTrace();
}

Я также видел другое решение, где readFully () использовался с байтовым массивом, который также хорошо работал.

try {
    raf.seek(index);
    byte[] bytes = raf.readFully(new byte[(int) length]); //length of the charactersequence to be read
    String str = bytes.toString();
} catch (IOException e){
    e.printStackTrace();
}

В этом решении длина байтового массива должна учитываться в символе новой строки, поэтому вы должны рассчитать это с учетом длины строки. -> Начать в файле с разрывов строк и завершить индекс в файле с разрывами строк. длина = endInFile-startInFile +1;

...