Java читать файл в строку
Обновлено: 21.11.2024
Java предоставляет несколько способов чтения файлов. Каждый из этих методов подходит для чтения разных типов файлов в разных ситуациях. Некоторые лучше подходят для чтения более длинных файлов, другие — для чтения более коротких и т. д.
В этом руководстве мы будем использовать следующие классы Java для чтения файлов
- Буферизованное чтение
- Файлы
- Сканер
На протяжении всего руководства мы используем файл, хранящийся в каталоге src, где путь к файлу — src/file.txt .
Сохраните несколько строк текста в этом файле, прежде чем продолжить.
Примечание. Вы должны правильно обрабатывать ошибки при использовании этих реализаций, чтобы придерживаться лучших методов написания кода.
Чтение текстовых файлов в Java с помощью BufferedReader
Класс BufferedReader считывает поток ввода символов. Он буферизует символы в буфере с размером по умолчанию 8 КБ, чтобы сделать процесс чтения более эффективным. Если вы хотите прочитать файл построчно, хорошим выбором будет использование BufferedReader.
BufferedReader эффективен при чтении больших файлов.
Метод readline() возвращает null при достижении конца файла.
Чтение файла в кодировке UTF-8 в Java с помощью BufferedReader
Мы можем использовать класс BufferedReader для чтения файла в кодировке UTF-8.
На этот раз мы передаем объект InputStreamReader при создании экземпляра BufferedReader.
Использование класса файлов Java для чтения файла
Класс Java Files, представленный в Java 7 в Java NIO, полностью состоит из статических методов, которые работают с файлами.
Используя класс Files, вы можете прочитать все содержимое файла в массив. Это делает его хорошим выбором для чтения небольших файлов.
Давайте посмотрим, как мы можем использовать класс Files в обоих этих сценариях.
Чтение небольших файлов в Java с помощью класса Files
Метод readAllLines() класса Files позволяет считывать все содержимое файла и сохранять каждую строку в массиве в виде строк.
Вы можете использовать класс Path для получения пути к файлу, поскольку класс Files принимает объект Path файла.
Вы можете использовать readAllBytes() для извлечения данных, хранящихся в файле, в массив байтов, а не в массив строк.
Чтение больших файлов в Java с помощью класса Files
Если вы хотите прочитать большой файл с помощью класса Files, вы можете использовать метод newBufferedReader() для получения экземпляра класса BufferedReader и читать файл построчно с помощью BufferedReader .
Чтение файлов с помощью Files.lines()
В Java 8 в классе Files появился новый метод для чтения всего файла в поток строк.
Чтение текстовых файлов в Java с помощью сканера
Класс Scanner разбивает содержимое файла на части, используя заданный разделитель, и считывает его часть за частью. Этот подход лучше всего подходит для чтения контента, разделенного разделителем.
Например, класс Scanner идеально подходит для чтения списка целых чисел, разделенных пробелами, или списка строк, разделенных запятыми.
Разделителем по умолчанию для класса Scanner является пробел. Но вы можете установить разделитель на другой символ или регулярное выражение. Он также имеет различные методы next, такие как next() , nextInt() , nextLine() и nextByte() для преобразования содержимого в различные типы.
В приведенном выше примере мы устанавливаем разделитель на пробел и используем метод next() для чтения следующей части содержимого, разделенной пробелом.
Чтение всего файла
Вы можете использовать класс Scanner для одновременного чтения всего файла без запуска цикла. Вы должны передать «\\Z» в качестве разделителя для этого.
Заключение
Как вы видели в этом руководстве, Java предлагает множество методов чтения текстовых файлов, которые вы можете выбрать в зависимости от характера стоящей перед вами задачи. Вы можете использовать BufferedReader для чтения больших файлов построчно.
Если вы хотите прочитать файл, содержимое которого разделено разделителем, используйте класс Scanner.
Также вы можете использовать класс Java NIO Files для чтения как маленьких, так и больших файлов.
Иногда при работе с файлами нам нужно прочитать файл в String в Java. Сегодня мы рассмотрим различные способы чтения файла в String в Java.
Java прочитать файл в строку
Есть много способов прочитать файл в String в Java. В этом руководстве мы рассмотрим следующие способы.
- Java читает файл в String с помощью BufferedReader
- Чтение файла в строку в java с помощью FileInputStream
- Java читает файл в строку с помощью класса Files
- Чтение файла в строку с помощью класса Scanner
- Java читает файл в строку с помощью класса Apache Commons IO FileUtils
Теперь давайте рассмотрим эти классы и прочитаем файл в String.
Java читает файл в String с помощью BufferedReader
Мы можем использовать метод BufferedReader readLine для чтения файла построчно. Все, что нам нужно сделать, это добавить их к объекту StringBuilder с символом новой строки. Ниже приведен фрагмент кода для чтения файла в строку с помощью BufferedReader.
Есть еще один эффективный способ чтения файла в строку с использованием BufferedReader и массива символов.
Чтение файла в строку в java с помощью FileInputStream
Мы можем использовать FileInputStream и массив байтов для чтения файла в строку. Вы должны использовать этот метод для чтения файлов, не основанных на символах, таких как изображения, видео и т. д.
Java читает файл в строку, используя класс Files
Мы можем использовать служебный класс Files, чтобы прочитать все содержимое файла в строку в одной строке кода.
Чтение файла в строку с помощью класса Scanner
Класс сканера — это быстрый способ чтения текстового файла в строку в Java.
Java читает файл в строку, используя класс Apache Commons IO FileUtils
Если вы используете Apache Commons IO в своем проекте, то это простой и быстрый способ прочитать файл в строку в Java.
Пример чтения Java-файла в строку
Вот окончательная программа с правильной обработкой исключений и демонстрирующая все различные способы чтения файла в строку.
Вы можете использовать любой из вышеперечисленных способов чтения содержимого файла в строку в java. Однако это не рекомендуется делать, если размер файла огромен, так как вы можете столкнуться с ошибками нехватки памяти.
В этом руководстве мы будем читать файл в строку в Java. Есть несколько способов прочитать текстовое содержимое файла.
Вот список всех классов и методов, которые мы рассмотрим:
Файлы.lines()
Класс Files содержит статические методы для работы с файлами и каталогами. Полезным методом является lines(), который возвращает поток строк: Stream. Из этого потока можно получить строки, содержащиеся в файле.
Метод принимает путь к файлу, который мы хотим прочитать, с дополнительным набором символов. Мы будем использовать синтаксис try-with-resources для автоматизации сброса и закрытия:
Поскольку метод возвращает Stream , мы используем его метод forEach() для перебора строк со ссылкой на метод для краткости.
Вместо того, чтобы печатать каждую строку, можно использовать StringBuilder для добавления строк:
С помощью StringBuilder весь файл может быть представлен одной строкой (переменной содержимого выше). Перед выполнением таких итераций важно учитывать длину входного файла.
Если файл не слишком велик, можно поместить его в строку, однако, если его размер составляет сотни мегабайт, это не так разумно.
Файлы.readString()
Начиная с Java 11 класс Files познакомил нас с методом readString(), который принимает путь к файлу, а также набор символов .
В отличие от Files.lines(), он возвращает строку напрямую, а не объект Stream:
Файлы.readAllBytes()
Более низкоуровневый подход к чтению — это метод Files.readAllBytes(), который возвращает byte[] . Разработчик может использовать эти байты — преобразовывать их в строку, обрабатывать как есть и т. д.
Этот метод также принимает путь к файлу, который мы хотим прочитать:
Теперь массив bytes содержит всю информацию из файла input.txt. Самый простой способ преобразовать его в строку — поместить их в конструктор с необязательным набором символов:
Примечание. Такие решения, как чтение всех байтов, подходят только в тех случаях, когда мы имеем дело с файлами небольшого размера. Это не очень удобно для производительности и не имеет особого смысла хранить большие файлы в памяти программы.
Сканер
Scanner – особенно полезный класс для чтения контента из потоков. Поскольку он работает с абстрактными потоками, его также можно использовать для чтения строк. Сканер работает, разбивая входные данные на токены, которые последовательно извлекаются из входного потока.
Поскольку мы работаем со строками, мы хотели бы использовать методы, возвращающие строки. Scanner имеет next() и nextLine() именно для этого. Оба метода возвращают объекты типа String. Первый используется для чтения произвольных строк, тогда как второй анализирует и возвращает целые строки.
Если каждая строка содержит нужное количество данных, то nextLine() является идеальным выбором. Если в файле есть важная информация, которая разбита на более мелкие фрагменты, но не обязательно на строки (или файл содержит, скажем, одну строку), то next() может быть лучшим вариантом.
Конструктор Scanner принимает множество объектов — Path s, InputStream s, File s и т. д. Мы будем использовать File :
Мы используем цикл while, пока в sc больше элементов. Если бы мы не проверили с помощью hasNext() , sc выдал бы исключение NoSuchElementException, если мы попытаемся получить доступ к элементу после последнего.
Идея использования методов hasNext() и next() исходит из интерфейса Iterator, так как Scanner реализует его внутри.
Чтение файлов
Бесплатная электронная книга: Git Essentials
Ознакомьтесь с нашим практическим руководством по изучению Git, включающим передовые практики, общепринятые стандарты и памятку. Перестаньте гуглить команды Git и на самом деле изучите их!
FileReader используется для чтения файлов. Он предлагает методы read() и read(char[]), которые возвращают один символ и несколько символов соответственно. Кроме того, он принимает файл или строку в конструктор.
FileReader.read(char[])
Давайте откроем файл с помощью FileReader и прочитаем его содержимое:
Метод read() принимает последовательность символов (в которой мы сохраняем прочитанные символы), начальную и конечную точки того, что мы хотим прочитать. В частности, мы решили прочитать максимум 256 символов. Если в input.txt больше, мы прочитаем только 256 символов. Если меньше, возвращаются читаемые символы.
Возвращаемое значение, хранящееся внутри целого числа n, можно использовать для проверки того, сколько символов метод на самом деле прочитал. Если достигнут конец потока, метод возвращает -1 .
Поскольку метод заполняет char[] , мы можем преобразовать его в String . Аналогичный результат можно получить, используя String.valueOf(char[]) .
FileReader.read()
Метод read() без char[] считывает по одному символу за раз. Мы хотим пройтись по содержимому и прочитать каждый символ самостоятельно:
Здесь мы проверяем, не равен ли прочитанный символ -1 , что указывает на то, что не осталось символов для чтения. Если нет, мы append() его в StringBuilder и, наконец, преобразуем его в String .
Примечание. И read(), и read(char[]) считывают байты, преобразовывают их в символы и возвращают один за другим. Это неэффективно и по возможности должно выполняться с буферизацией.
Буферизованное чтение
BufferedReader – это объект, предназначенный для чтения текста из потока ввода символов. Он буферизован, то есть использует внутренний буфер для временного хранения. Как мы видели в предыдущем разделе, «обычные» Reader иногда могут быть неэффективными.
Рекомендуется поместить любой потенциально дорогостоящий Reader в BufferedReader, чтобы повысить производительность, поскольку буферизация символов обеспечивает более эффективное чтение вводимого текста.
Давайте создадим экземпляр BufferedReader:
На данный момент у нас есть буферизованный объект чтения, готовый прочитать содержимое из input.txt. В этом примере мы будем читать файл построчно, хотя BufferedReader поддерживает чтение как отдельных символов, так и нескольких символов в виде массива.
Давайте воспользуемся этим экземпляром BufferedReader для чтения файла и построчного сохранения его содержимого в виде строки:
И снова мы используем StringBuilder для сбора всех строк. Чтобы разделить каждую строку, мы добавляем между ними нуль-терминатор ( \n ). Наконец, мы закрываем поток.
Не было простого способа прочитать текстовый файл как строку в Java до JDK 7, который выпустил NIO 2. Этот API теперь предоставляет несколько служебных методов, которые вы можете использовать для чтения всего файла как строки, например. Files.readAllBytes() возвращает массив байтов всего текстового файла. Вы можете преобразовать этот массив байтов в строку, чтобы весь текстовый файл был строкой внутри вашей программы Java. Если вам нужны все строки файлов в виде списка строк, например. в ArrayList, вы можете использовать метод Files.readAllLines(). Это возвращает список строк, где каждая строка представляет одну строку файла.
До этих изменений API я использовал BufferedReader и StringBuilder для чтения всего текстового файла как строки. Вы перебираете файл, читая по одной строке с помощью метода readLine() и добавляя их в StringBuilder, пока не дойдете до конца файла. Вы по-прежнему можете использовать этот метод, если используете Java SE 6 или более раннюю версию.
В этой статье мы рассмотрим пару примеров, демонстрирующих, как читать текстовый файл как строку или получить список строк как строку из текстового файла. Я также покажу способ BufferedReader, который вы можете использовать в Java SE 6 и более ранних версиях.
Чтение текстового файла как строки в Java — пример Files.readAllBytes()
Это стандартный способ чтения всего файла как строки в Java. Просто убедитесь, что файл небольшого или среднего размера и у вас достаточно места в куче для хранения текста из файла в памяти. Если у вас недостаточно памяти, приведенный ниже код может вызвать ошибку java.lang.OutOfMemoryError: место в куче Java, так что остерегайтесь этого.
Вот способ чтения файла как строки в Java 7:
Вы также должны быть осторожны с кодировкой символов. Приведенный выше код предполагает, что кодировка символов по умолчанию для файла и платформы одинакова. Если это не так, используйте правильную кодировку символов при преобразовании массива байтов в строку в Java.Посмотрите эти бесплатные онлайн-курсы по программированию на Java, чтобы узнать больше о кодировании символов и преобразовании байтов в текст в Java.
Чтение текстового файла как строки в Java — пример BufferedReader
Это был старый способ чтения файла как строки в Java. Вы можете видеть, что для этого требуется от 8 до 10 строк кода, что теперь можно эффективно выполнить всего в одну строку в Java 7. Он использует метод readLine() для чтения файла построчно, а затем объединяет их вместе с помощью добавления StringBuilder. () метод.
Не забудьте добавить символ \n, чтобы вставить разрыв строки, иначе все строки будут объединены вместе, и весь текст из файла будет состоять из одной большой строки. Если вы не знакомы с \n или \r\n , я предлагаю вам присоединиться к всеобъемлющему курсу Java The Complete Java Masterclass, чтобы узнать больше о специальных символах в Java.
Программа Java для чтения текстового файла как строки
Вот полная программа на Java для чтения текстового файла как строки. Она включает подходы JDK 6 и JDK 7 к чтению содержимого файла в строковой переменной.
Во втором примере не забудьте добавить "\n" или "\r\n" в зависимости от того, работаете ли вы в Windows или UNIX, иначе все строки файлов будут объединены в всего одна строка. Кроме того, не забудьте закрыть BufferedReader, чтобы предотвратить утечку ресурсов, особенно если вы не используете функцию автоматического управления ресурсами Java 7.
Это все о том, как читать текстовый файл как строку в Java. Вы можете использовать новый способ, если ваша программа работает на JRE 7, и старый способ, если вы используете Java 6 или более ранние версии. Обратите внимание на кодировку символов в файле, если вы не уверены, что кодировка по умолчанию для файла и платформы (машина, на которой выполняется ваша программа Java) не одинакова.
Связанные учебники по файлам Java, которые могут вам понравиться
- Как записать в файл с помощью BufferedWriter в Java? (решение)
- Как читать/записывать файл XLSX в Java? (решение)
- Как прочитать текстовый файл с помощью BufferedReader в Java? (пример)
- Как загрузить данные из CSV-файла в Java? (пример)
- Как добавить текст в файл в Java? (решение)
- Как читать InputStream как поток в Java? (пример)
- Как найти в файле слово, встречающееся чаще всего в Java? (решение)
- 2 способа прочитать текстовый файл в Java? (решение)
Это все о том, как читать данные из файла в виде строки в Java. Это полезная техника, которую должны знать Java-разработчики. Она может быть полезна во многих случаях, например при загрузке файлов журнала или файлов содержимого.
Читайте также: