Решение Java:
BufferedReader r = new BufferedReader(new FileReader(f));
String line;
for ( int ln = 0; (line = r.readLine()) != null && ln <= end; ln++ ) {
if ( ln >= start ) {
//Some code here
}
}
Брутто, а?
К сожалению, если ваши строки не имеют фиксированной длины, вы не сможете перейти к start
thстрока эффективно, так как каждая строка может быть произвольно длинной и, следовательно, все данные должны быть прочитаны.Это не исключает более приятного решения.
Java 8
Я подумал, что стоит обновить, чтобы показать, как сделать это эффективно с потоками:
int start = 5;
int end = 12;
Path file = Paths.get("/tmp/bigfile.txt");
try (Stream<String> lines = Files.lines(file)) {
lines.skip(start).limit(end-start).forEach(System.out::println);
}
Поскольку потоки лениво оцениваются, он будет читать только строки вплоть до end
(плюс любую внутреннюю буферизацию, которую он выберет).