Java как прочитать определенную строку из файла

Обновлено: 01.07.2024

Управление текстовыми файлами - это навык, который хорошо послужит вам в вашей карьере программиста. В этом разделе вы узнаете, как создать, открыть и прочитать текстовый файл Java.

Под текстовым файлом мы имеем в виду файл с текстом - все просто! Вы можете создать текстовый файл в таких программах, как Блокнот на компьютере с Windows, TextEdit на Mac, Gedit в среде Linux/Gnome.

Первое, что мы сделаем, это откроем текстовый файл и прочитаем его содержимое.

Как прочитать текстовый файл

Для этой цели начните новый проект. Назовите пакет openandread, а класс ReadFile. Добавьте оператор импорта чуть ниже названия пакета и перед именем класса:

Ваше окно с кодом будет выглядеть так:

Чтобы Java-программа работала корректно с нашими текстовыми файлами, добавьте следующее к методу main (текст на синем фоне):

Чтобы открыть текстовый файл, давайте создадим новый класс. Итак выберите File > New File в меню NetBeans вверху. Создайте новый файл Java Class и дайте ему имя FileData. Когда ваш новый класс будет создан, добавьте следующие три оператора импорта:

Ваш новый класс должен выглядеть следующим образом:

(Все три импорта подчеркнуты желтым цветом, потому что мы еще ничего с ними не сделали. Это функция NetBeans.)

Для того, чтобы прочитать текстовый файл Java, мы создадим новый объект из этого класса. Добавьте следующий конструктор в свой код вместе с приватным полем String с именем path_to_file:

То, что мы здесь делаем, это передаем в метод имя переменной, содержащей путь к текстовому файлу, который будем читать, а затем присваиваем этой переменной новое имя, которое будем использовать в дальнейшем в нашем методе.

Теперь нам нужно создать метод, который возвращает все строки кода из текстового файла. Они будут храниться в массиве. Добавьте следующее объявление метода, который откроет файл:

Не переживайте из-за красного подчеркивания: оно исчезнет, ​​как только мы добавим код. NetBeans добавляет подчеркивание, потому что у нас нет оператора return.

Обратите внимание, что метод настроен на возврат массива String:

Массив будет содержать все строки из текстового файла.

Также обратите внимание, что мы добавили в конец заголовка метода throws IOException. Каждый метод, который работает над чтением текстовых файлов в Java, нуждается в подобном методе. Throw в переводе с английского означает «выбросить». Java выбросит ошибки, которые мы сможем увидеть в нашем методе main.

Для того, что прочитать символы из текстового файла используется FileReader. Он читает байты из текстового файла, а каждый байт является отдельным символом.

Вы можете читать целые строки текста, а не отдельные символы. Для этого нужно передать то, что находится в FileReader классу BufferedReader. BufferedReader имеет удобный метод, называемый ReadLine. Как следует из названия, он используется для чтения целых строк, а не отдельных символов. А вот BufferedReader сохраняет символы в памяти (в буфере), чтобы ими было легче манипулировать.

Давайте установим FileReader и BufferedReader:

Здесь мы создаем два новых объекта: первый - это объект FileReader, который мы назвали x; второй - это объект BufferedReader с именем varRead.

FileReader открывает и считывает файл, исходя из пути к нему. Эту информацию мы сохраняем в переменной path_to_file. А дальше мы можем использовать ее.

В BufferedReader передается объект FileReader (в круглых скобках). Все символы файла затем сохранятся в памяти в ожидании манипуляции. Они сохранятся в переменной varRead.

Прежде чем мы сможем прочитать текст из нашего текстового файла, нам нужно настроить массив. Каждая позиция в массиве может содержать одну полную строку текста. Поэтому добавьте следующее в свой код:

Сейчас мы установили количество строк в текстовом файле равным 3. Очевидно, что текстовые файлы могут содержать любое количество строк, и мы обычно не знаем, сколько их. Поэтому вскоре мы это изменим. Мы напишем отдельный метод, который получает количество строк в текстовом файле.

Дальше мы устанавливаем массив строк. Количество позиций в массиве (его размер) устанавливается равным количеству строк. Мы поместили эту переменную в квадратные скобки.

Чтобы поместить все строки текста из файла в каждую позицию в массиве, нам нужен цикл. Цикл получит каждую строку текста и поместит их в массив. Добавьте следующее в код:

Ваше окно с кодом должно выглядеть так:

Цикл for идет от 0 до меньше, чем количества строк. (Помните, позиции массива начинаются с 0. Три строки будут сохранены в позициях 0, 1 и 2.)

Здесь мы обращаемся к строкам текста и сохраняем их в массив:

После знака равенства мы имеем это:

Объект varRead, который мы установили, читает все символы из текстового файла, которые находятся в памяти (в буфере). Мы можем использовать метод readLine, чтобы прочитать полную строку текстового файла из буфера. После того, как строка прочитана, мы сохраняем ее в позиции массива:

Переменная с именем i будет увеличиваться каждый раз согласно условиям цикла, проходя через весь массив, хранящий наш текст.

Осталось добавить в метод следующее:

Метод close очищает временный буфер памяти с именем varRead. Возвращаемая строка возвращает весь массив. Обратите внимание, что для этого массива квадратные скобки не требуются.

Когда вы закончите написание кода этого метода, все эти уродливые подчеркивания должны исчезнуть. Ваш метод должен выглядеть следующим образом:

Однако все еще существует проблема количества строк. Мы указали жесткое 3. Нам нужно прочитать весь текстовый файл и посчитать, сколько в нем строк. Поэтому добавьте следующий метод в класс FileData:

Новый метод называется numStrings и настроен на возврат целочисленного значения. Это количество строк в текстовом файле. Обратите внимание, что этот метод в заголовке также имеет IOException.

В этом коде устанавливается другой FileReader и другой BufferedReader. Чтобы поставить в цикл наш текст, мы написали:

Цикл while выглядит немного грязно. Но он просто говорит «прочитайте каждую строку текста и остановитесь, когда не будет достигнуто нулевое значение». (Если Java прочитала весь текстовый файл, и больше не осталось строк, вернется значение null.) В фигурных скобках мы увеличиваем счетчик с именем num.

В конце кода мы очищаем буфер памяти с именем y и возвращаем количество строк.

Чтобы вызвать этот новый метод в действие, измените методе OpenAndRead это:

Таким образом, вместо жесткого указания количества строк, мы можем вызвать наш новый метод и получить количество строк в любом текстовом файле.

Хорошо, пришло время запустить новый класс и посмотреть, открывает ли он текстовый файл и сможет ли он прочитать его.

Вернитесь к классу ReadFile, классу с методом main. Установите строковую переменную для хранения имени текстового файла:

На этом этапе вам нужно создать текстовый файл где-нибудь на компьютере. Мы создали его в блокноте на компьютере с Windows:

Имя текстового файла - test.txt. Создайте аналогичный у себя. Обратите внимание, куда вы его сохраняете, чтоб указать правильный путь к нему:

Если бы мы создали папку с именем MyFiles для хранения этого файла, путь был бы «D: /MyFiles/test.txt». Измените путь к файлу, если это необходимо.

Следующее, что нужно сделать, - это создать новый объект из нашего класса FileData. Затем мы сможем вызвать метод, который откроет и прочитает наш текстовый файл в Java. Мы сделаем это в блоке try . catch.

Добавьте следующий код под переменной String:

Не забудьте все фигурные скобки для блока try . catch. Вам нужна одна пара для части try и другая - для части catch. Для пробной части у нас есть это:

Первая строка устанавливает новый объект FileData с именем new_file. В круглых скобках FileData мы добавили переменную new_path. Этого достаточно, чтобы передать конструктору путь к файлу, который ему нужен.

Вторая строка кода устанавливает массив String с именем aryStrings. После знака равенства мы вызвали метод OpenAndRead нашего класса FileData. Если он успешно открывает текстовый файл, то массив текстовых строк будет передан новому массиву aryStrings.

Однако, если что-то пойдет не так, появится ошибка, которую мы поместили в части catch блока try . catch:

После слова catch в круглых скобках у нас есть это:

Для этого исключения мы устанавливаем переменную с именем a, которая имеет тип IOException. У объекта IOException есть собственные методы, которые вы можете использовать. Одним из таких методов является getMessage. Это даст пользователю некоторую информацию о том, что пошло не так.

Ваше окно с кодом должно теперь выглядеть так:

Когда программа будет запущена, в окне «Вывод» будет напечатано следующее:

Как видите, с помощью Java мы прочитали каждую строку из нашего текстового файла.

Чтобы проверить часть кода, проверяющую ошибки, измените имя вашего текстового файла на тот, который, как вы знаете, не был создан. Затем запустите этот код. В окне «Вывод» ниже вы можете видеть, что наш текстовый файл был изменен на test2, и его не удалось найти:

Как прочитать текстовый файл с русскими буквами в Java

Если вас интересует, как прочитать текстовый файл на русском языке, то:

  1. Нужно добавить еще несколько import:
  2. В методе numStrings замените строку:

Cp1251 – это кодировка, в которой выполнен текстовый файл. Мы конвертируем символы кириллицы с помощью InputStreamReader и FileInputStream.

Окно «Вывод» будет следующим:

В следующем уроке вы узнаете, как сделать запись в уже существующий текстовый файл или создать новый, используя код Java.

в Java есть ли какой-либо метод для чтения определенной строки из файла? Например, прочитайте строку 32 или любой другой номер строки.

Если у вас нет предыдущих знаний о строках в файле, нет возможности напрямую получить доступ к 32-й строке без чтения 31 предыдущей строки.

Это справедливо для всех языков и всех современных файловых систем.

так эффективно вы будете просто читать строки, пока не найдете 32-й.

файлы:

для больших файлов:

Не то, что я знаю, но то, что вы могли бы сделать, это цикл через первые 31 строки, ничего не делая с помощью функции readline() BufferedReader

Joachim, конечно, прав, и альтернативная реализация Chris' (для небольших файлов только потому, что она загружает весь файл) может быть использовать commons-io из Apache (хотя, возможно, вы не захотите вводить новую зависимость только для этого, если вы найдете ее полезной для других вещей, хотя это может иметь смысл).

можно попробовать indexed-file-reader (Лицензия Apache 2.0). Класс IndexedFileReader имеет метод с именем readLines (int from, int to) который возвращает SortedMap, ключ которого является номером строки, а значение-строка, которая была прочитана.

приведенный выше пример считывает текстовый файл, состоящий из 50 строк в следующем формате:

Disclamer: я написал эту библиотеку

хотя, как сказано в других ответах, невозможно добраться до точной линии, не зная смещения ( указателя ) раньше. Итак, я достиг этого, создав временный индексный файл, который будет хранить значения смещения каждой строки. Если файл достаточно мал, вы можете просто сохранить индексы ( смещение ) в памяти без необходимости отдельного файла для него.

сложности: Это O (n), поскольку он читает весь файл один раз. Обратите внимание на требования к памяти. Если он слишком большой, чтобы быть в памяти, сделайте временный файл, который хранит смещения вместо ArrayList, как показано выше.

Примечание : если все, что вы хотите в строке "32", вам просто нужно вызвать readLine (), также доступный через другие классы '32' раз. Вышеуказанный подход полезен, если вы хотите получить определенную строку (на основе номера строки, конечно) несколько раз.

нет, если в этом формате файла длины строк не определены заранее (например, все строки с фиксированной длиной), вам придется перебирать строку за строкой, чтобы подсчитать их.

Как прочитать файл на Java? Мы можем использовать классы ввода-вывода Java для чтения текстовых и двоичных файлов, таких как изображения, pdf и т.д., Используя BufferedReader, FileInputStream.

Существует множество различных способов чтения файла на Java. В этом уроке мы рассмотрим 5 различных способов чтения файла на Java.

Различные способы чтения файла на Java

5 классов из API ввода-вывода Java для чтения файлов:

  1. Буферизатор
  2. Поток ввода файлов
  3. Файлы
  4. Сканер
  5. Случайный файл

Чтение двоичных файлов и текстовых файлов

  • Класс FileInputStream считывает данные файла в поток байтов. Поэтому его следует использовать для двоичных файлов, таких как изображения, pdf, мультимедиа, видео и т.д.
  • Текстовые файлы основаны на символах. Мы можем использовать классы Reader , а также потоковые классы для их чтения.
  • Файлы и классы сканера можно использовать для чтения текстовых файлов, а не двоичных файлов.

Давайте рассмотрим примеры программ для чтения файла на Java.

1. BufferedReader Читает файл

Мы можем использовать BufferedReader для считывания содержимого текстового файла в массив символов .

BufferedReader эффективен для чтения файла, поскольку он буферизует входные данные из указанного файла. Без буферизации каждый вызов методов read() или readLine() будет считывать байты из файла, затем преобразовываться в символы и возвращаться, что будет очень неэффективно.

В приведенной выше программе я печатаю данные файла на консоль. Давайте рассмотрим другой класс утилит для выполнения операций чтения файлов.

  1. Прочитайте полный файл в виде строки
  2. Считывайте файл строка за строкой и возвращайте список строк
  3. Подсчитайте вхождение строки в данный файл.

2. FileInputStream – Считывание двоичных файлов в байты

Мы всегда должны использовать поток для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.

Операция чтения FileInputStream используется с массивом байтов, в то время как операция чтения BufferedReader использует массив символов.

3. Файлы – Чтение файла в список строк

4. Сканер – Считывает текстовый файл в качестве итератора

Мы можем использовать класс сканера для чтения текстового файла. Он работает как итератор

5. RandomAccessFile – Чтение файлов в режиме только для чтения

Класс RandomAccessFile позволяет нам читать файл в разных режимах. Это хороший вариант, если вы хотите убедиться, что в файле не выполняется случайная операция записи.

Это все для чтения файла на Java с использованием различных классов из Java IO API.

Вот сам код, что смог сделать:

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Как из файла взять нужную строку?
Как из файла взять нужную строку?

Как из сохраненного файла считать нужную строку
Imports System.IO Public Class Form1 Public x, y, z As Integer Public imya As String.

Как считать нужную строку из текстового файла?
Как считать из файла нужную строку? Добавлено через 19 минут Есть файл, в нём две строки, при.

Вывести нужную строку random
В данном цикле сделать так, чтобы на предпоследней итерации, вывелись 4 числа (в столбик или в.

Можно сделать метод, который на вход получает строку и ищет в ней дату. В данном случае, это четыре цифры идущие друг за другом. Если последовательность из четырёх цифр находится - метод возвращает true -> программа печатает эту строку. Если false, то, соответственно, не печатает. просто построчно добавить содержимое в массив стрингов
проганять его в цикле и искать дефолтным методом (не помно, contains или prefix, вроде и тем и тем можно (класс String)) нашу дату указывая ее в переменной и вызывая с нее эти методы.
если получаем true, то выводить содержимое елемента с текущим индексом Unravel, можешь объяснить зачем ты тут используешь RandomAccessFile? Все равно выдает ошыбку:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at labor8feladat2.Labor8feladat2.searchInFile(Labor8feladat2.ja va:34)
at labor8feladat2.Labor8feladat2.main(Labor8feladat2.java:19)
Java Result: 1 ведь код где?
и содержимое файла из которого читаем

Удалить нужную строку из файла
День добрый как удалить нужную строку из файла? при этом не оставив после этого пустой строки??

Запись текста в нужную строку файла на сервере
Привет, пытаюсь записать все в файл на сервере, но у меня не вышло, поэтому я создаю файл а потом.

Как считать нужную строку?
Нужно считать определенную строку из файла. System.IO.FileStream files=new.


Как перейти на нужную строку в RichTextBox?
Наверно, другими словами переместить указатель.

В Java есть ли какой-либо метод для чтения определенной строки из файла? Например, прочитайте строку 32 или любой другой номер строки.

Если у вас нет предыдущих знаний о строках в файле, нет никакого способа прямого доступа к 32-й строке без чтения 31 предыдущей строки.

Это верно для всех языков и всех современных файловых систем.

Таким образом, вы будете просто читать строки, пока не найдете 32-й.

Используйте поток, который поддерживает readline, и просто прочитайте первые строки X-1 и дамп результаты, а затем обработать следующий.

Не то, что я знаю, но то, что вы могли бы сделать, это петля через первые 31 строки, ничего не делая с помощью функции readline() BufferedReader

Нет, если в этом формате не определены заранее длины линий (например, все линии с фиксированной длиной), вам придется итерировать линию за линией, чтобы подсчитать их.

Joachim, конечно, прав, и альтернативной реализацией Chris (для небольших файлов только потому, что он загружает весь файл) может быть использование commons-io из Apache (хотя, возможно, вы не захотите вводить новую зависимость только для этого, если вы найдете ее полезной для других вещей тоже, хотя это может иметь смысл).

Вместо BufferedReader можно использовать LineNumberReader. Пройдите через api. Можно найти методы setLineNumber и getLineNumber.

Вы также можете взглянуть на LineNumberReader, подкласс BufferedReader. Наряду с методом readline, он также имеет методы setter / getter для доступа к номеру строки. Очень полезно следить за количеством прочитанных строк, при чтении данных из файла.

Вы можете попробовать indexed-file-reader (Лицензия Apache 2.0). Класс IndexedFileReader имеет метод readLines (int from, int to), который возвращает SortedMap, ключом которого является номер строки, а значением-прочитанная строка.

В приведенном выше примере читается текстовый файл, состоящий из 50 строк в следующем формате:

Disclamer: я написал эту библиотеку

Для небольших файлов:

Для больших файлов:

Но вместо возврата строки Я возвращаю LinkedList строк. Затем я могу выбрать нужную строку.

можно использовать функцию skip (), чтобы пропустить строки из начала.

Хотя, как сказано в других ответах, невозможно добраться до точной линии, не зная смещения ( указателя ) раньше. Таким образом, я достиг этого, создав временный индексный файл, в котором будут храниться значения смещения каждой строки. Если файл достаточно мал, вы можете просто сохранить индексы ( смещение ) в памяти без необходимости отдельного файла для него.

Сложность: это O (n), так как он читает весь файл один раз. Обратите внимание на требования к памяти. Если он слишком большой, чтобы быть в памяти, то сделайте временный файл, который хранит смещения вместо ArrayList, как показано выше.

Читайте также: