Как считать строки из файла java
Чтение строк из файла в Java можно выполнить с помощью класса BufferedReader , который позволяет читать текстовые данные из потока ввода. Для чтения строк из файла сначала необходимо открыть файл для чтения, а затем читать строки по одной до тех пор, пока не достигнут конец файла.
Ниже приведен пример кода, который демонстрирует, как считывать строки из файла в Java с помощью BufferedReader :
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main public static void main(String[] args) try BufferedReader reader = new BufferedReader(new FileReader("file.txt")); String line = reader.readLine(); while (line != null) System.out.println(line); line = reader.readLine(); > reader.close(); > catch (IOException e) e.printStackTrace(); > > >
- В этом примере мы создаем объект BufferedReader с помощью конструктора new BufferedReader(new FileReader(«file.txt»)) , где file.txt — это имя файла, который мы хотим прочитать.
- Затем мы читаем строки из файла, вызывая метод readLine() объекта BufferedReader . Метод readLine() возвращает очередную строку текста из файла или null , если достигнут конец файла.
Кроме того, обратите внимание, что мы заключили вызов BufferedReader.close() в блок finally , чтобы гарантировать, что поток чтения будет закрыт даже в случае исключения.
Как прочитать InputStream в строку?
Обычно строковые данные извне попадают в программу именно в виде потока. Потоком читаются файлы, сетевые данные из сокета, пользовательский ввод. Если есть такая возможность, лучше избегать сохранения потоковых данных в память, и обрабатывать их также в потоке. Например, когда из большого xml-файла необходимо достать один определенный элемент, имеет смысл выбрать потоковый xml-парсер.
В общем виде все решения выглядят так. Заводится буфер – массив символов. Поток направляется в этот буфер. По заполнению данные из массива присоединяются в хвост строки-результата.
Простой способ – использовать трюк со сканером. Вообще класс Scanner читает из потока подстроки, разделенные указанным символом. Когда нужно прочитать всю строку сразу, в качестве разделителя устанавливается «\\A» – спецсимвол «начало строки». Это решение просто в реализации, но имеет проблемы. Размер внутреннего буфера фиксирован (1024 символа), а логика поиска разделителя плохо влияет на производительность.
Хорошее решение для продакшна – читать в собственный массив-буфер непосредственно методом InputStream.read , либо обернув поток в InputStreamReader . Данные из буфера затем переправляются в строку через StringBuilder или ByteArrayOutputStream . За готовой реализацией можно обратиться в библиотеки Apache Commons IO и Google Guava. Полный код реализации и сравнение производительности описаны на stackoverflow.
На интервью этот вопрос часто возникает как часть практической задачи, для консольного ввода-вывода. Поэтому, если вы идете на собеседование со своим компьютером, и неуверенно владеете классами работы с потоками, стоит заранее подготовить шпаргалку с кодом.
Прочитать строку из стандартного ввода в Java
В этом посте мы обсудим, как читать строку из стандартного ввода ( System.in ) с использованием Scanner а также BufferedReader на Java. Поскольку одна строка ввода может содержать несколько значений, разделите строку на строковые токены.
1. Использование Scanner
Простое решение — использовать Scanner класс для чтения строки из System.in . А Scanner разбивает свой ввод на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу.
Как с помощью Scanner считывать строку полностью, с учётом пробелов?
Он считывает только слово, до первого пробела. Его естественная функция. Но мне надо записать строку слов целиком. Везде предлагается метод использования nextLine() , но есть одно НО: При его использовании, при отображении в консоле вместо первой фразы «
"Input a Dream:"
» отображается сразу всё:
"Input a Dream: Input a Status: "
после чего можно заполнить только одну переменную — s_status_input . Как мне написать так, чтобы я смог ввести две фразы раздельно и каждая записалась в нужную переменную?
