Научитесь подсчитывать все строки в файле на Java, используя Stream of lines и класс LineNumberReader. Во всех перечисленных решениях мы перебираем строки, пока не встретим последнюю строку.
1. Подсчет линий с использованием потока линий
Метод Files.lines() можно использовать для получения потока строк из указанного текстового файла. Затем мы можем использовать метод stream.count() для подсчета элементов в потоке.
Обратите внимание, что файл закрывается путем закрытия потока. Поэтому, чтобы сделать вещи менее многословными, мы можем использовать оператор try-with-resources, который автоматически закрывает поток после использования.
При таком подходе не требуется, чтобы весь файл находился в памяти, поэтому он является эффективным решением для больших файлов.
String fileName = "c:/temp";long noOfLines = -1;try(Stream<String> fileStream = Files.lines(Paths.get(fileName))) {//Lines countnoOfLines =(int) fileStream.count();}
2. Использование LineNumberReader
LineNumberReader — это считыватель входного потока, который отслеживает номера строк. По умолчанию нумерация строк начинается с 0.
Мы можем посчитать общее количество строк в файле по ссылке LineNumberReader для файла и перейти к последней строке файла с помощью skip(). В этот момент мы можем получить количество строк с помощью getLineNumber().
Это решение также эффективно для больших текстовых файлов.
String fileName = "c:/temp";long noOfLines = -1;try(LineNumberReader lineNumberReader =new LineNumberReader(new FileReader(new File(fileName)))) {//Skip to last linelineNumberReader.skip(Long.MAX_VALUE);noOfLines = lineNumberReader.getLineNumber() + 1;}
3. Использование Files.readAllLines() для небольших файлов
Мы можем использовать два начальных решения и для небольших файлов. Но если файл небольшой и мы собираемся ссылаться на содержимое файла позже в коде приложения, то имеет смысл считать весь файл в память.
Метод readAllLines() считывает весь файл и возвращает все строки как Список строк. Чтобы подсчитать все строки, используйте метод list.size().
Это решение требует, чтобы весь файл находился в памяти, поэтому оно не является эффективным для больших файлов.
String fileName = "c:/temp";long noOfLines = -1;try(LineNumberReader lineNumberReader =new LineNumberReader(new FileReader(new File(fileName)))) {lineNumberReader.skip(Long.MAX_VALUE);noOfLines = lineNumberReader.getLineNumber() + 1;}
4. Заключение
В этом коротком уроке Java мы научились находить общее количество строк в файле с помощью Java. Мы увидели эффективные решения line Stream и LineNumberReader, а также плохие решения, такие как чтение всего файла в List.
Рекомендуется попробовать каждое решение для сравнения производительности, чтобы найти лучшее решение, отвечающее вашим требованиям.