Я хотел бы открыть файл, содержащий текст в кодировке UTF-8, может установить положение, прочитать 25 строк, может получить положение.
К сожалению, RandomAccessFile не поддерживает кодировку UTF-8. Итак, я написал этот код. Я рекурсивно вызываю метод getParsedLines () с возвращенным значением смещения, чтобы прочитать следующие 25 строк, но он печатает сначала 1-25 строк, затем выводит 349-373, 695-719 и так далее.
public long getParsedLines(File file, long offset) {
int counter = 0;
FileInputStream fis = null;
InputStreamReader streamReader = null;
BufferedReader br = null;
try {
fis = new FileInputStream(file);
fis.getChannel().position(offset);
streamReader = new InputStreamReader(fis, "UTF8");
br = new BufferedReader(streamReader);
String str;
while (counter <= 24) {
if ((str = br.readLine()) != null) {
System.out.println(str);
} else {
offset = -1;
break;
}
counter++;
}
if (fis != null) {
offset = fis.getChannel().position();
}
} catch (IOException ex) {
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException ex) {
}
}
return offset;
}
как получить последнее смещение правильно, чтобы я мог напечатать 1-25, 26-50, 51-75. 76-100 и т. Д.
Да .. Для некоторой обратной совместимости у меня есть ограничение, что я должен читать текстовый файл «построчно», используя readLine (), и читать только 25-25 строк за раз, а не весь текст.