У меня есть текстовый файл. Я хотел бы получить содержимое из одной строки в другую. Например, файл может быть 200K строк. Я хочу прочитать содержимое из строки 78 до строки 2735. Поскольку файл может быть очень большим, я не хочу читать весь контент в памяти.Прочитать текстовый файл в Java
ответ
Вот начало возможного решения:
public static List<String> linesFromTo(int from, int to, String fileName)
throws FileNotFoundException, IllegalArgumentException {
return linesFromTo(from, to, fileName, "UTF-8");
}
public static List<String> linesFromTo(int from, int to, String fileName, String charsetName)
throws FileNotFoundException, IllegalArgumentException {
if(from > to) {
throw new IllegalArgumentException("'from' > 'to'");
}
if(from < 1 || to < 1) {
throw new IllegalArgumentException("'from' or 'to' is negative");
}
List<String> lines = new ArrayList<String>();
Scanner scan = new Scanner(new File(fileName), charsetName);
int lineNumber = 0;
while(scan.hasNextLine() && lineNumber < to) {
lineNumber++;
String line = scan.nextLine();
if(lineNumber < from) continue;
lines.add(line);
}
if(lineNumber != to) {
throw new IllegalArgumentException(fileName+" does not have "+to+" lines");
}
return lines;
}
Просто прочитайте сначала строку за строкой и подсчитайте номера строк и начните получать содержимое, которое вам нужно, в указанной вами позиции.
Используйте BufferedReader.readLine() и подсчитайте линии. Вы сохраните только размер буфера и текущую строку в памяти.
И нет, невозможно добраться до строки 3412 без прочтения всего файла до этой точки (если только ваши строки не имеют фиксированного размера).
Я хотел бы предложить использовать RandomAccessFile, этот класс позволяет перейти к определенному местоположению в файле. Поэтому, если вы хотите прочитать последнюю строку файла, вам не нужно читать все предыдущие строки, вы можете просто перейти к этой строке.
Это не помогает, поскольку между байтовым индексом и номерами строк не существует фиксированной связи. Строка может быть такой же длинной или короткой, как вам угодно, поэтому вам нужно будет прочитать данные, чтобы знать, когда они заканчиваются. Чтение последней строки может быть улучшено таким образом (если файл фактически не содержит одну огромную линию), но в целом это не поможет. –
- 1. Прочитать текстовый файл в JAVA
- 2. Прочитать текстовый файл с позиции в Java
- 3. Прочитать большой текстовый файл в java, неосуществимо?
- 4. прочитать текстовый файл android
- 5. Java, прочитать текстовый файл постоянно не работает
- 6. Java прочитать текстовый файл HashMap, разделить на «:»
- 7. Невозможно прочитать текстовый файл на Java.
- 8. jquery - прочитать текстовый файл?
- 9. Прочитать текстовый файл C#
- 10. Попытка прочитать текстовый файл
- 11. Прочитать тяжелый текстовый файл
- 12. Прочитать текстовый файл в C++
- 13. прочитать текстовый файл в Matlab
- 14. Прочитать текстовый файл в matlab
- 15. прочитать текстовый файл в Xcode
- 16. Прочитать текстовый файл в D
- 17. Прочитать текстовый файл в массиве
- 18. Прочитать текстовый файл в целом
- 19. Прочитать текстовый файл, указанный пользователем
- 20. Текстовый текстовый файл в Java
- 21. Прочитать текстовый файл с ресурса
- 22. C++/cli Прочитать текстовый файл
- 23. не можете прочитать текстовый файл
- 24. подход, чтобы прочитать текстовый файл
- 25. Прочитать текстовый файл как ресурс
- 26. Прочитать текстовый файл и перетасовать
- 27. Прочитать текстовый файл из встроенного java-скрипта Java eclipse
- 28. прочитать текстовый файл, возвращаемый URL
- 29. Как правильно прочитать текстовый файл?
- 30. Parse Текстовый файл в Java
Замените '// take' на' assert' и добавьте ';' в конец ;-) –
Кроме того, есть ли причина использовать сканер вместо (возможно) более простого 'BufferedReader'? Кроме того: вы не указываете использование кодировки символов для чтения из файла, поэтому вы оставляете эту часть на удачу. –
@Joachim, хорошие моменты, я отредактировал мой ответ! Что касается «BufferedReader», я предполагаю, что (d) это не имеет большого значения: я ошибаюсь? –