Как ввести имя файла с консоли в java

Обновлено: 07.07.2024

При работе с приложениями или сайтами, пользователям необходимо вводить свои данные: почту, пароль, день рождения и так далее. В Java применяются несколько способов ввода данных с клавиатуры: c помощью метода readLine() класса BufferedReader или метода nextLine() класса Scanner. Разберем подробнее, как работают эти методы.

Метод readLine()

BufferedReader readLine() применяется для чтения одной строки текста, который пользователь ввел с консоли. Конец строки в коде может быть указан как Enter, так и \n , \r или EOF — end of file.

BufferedReader readLIne() работает только со строками в коде. А метод Scanner nextLine() считывает и другие типы данных, например, int, long, double, float.

BufferedReader работает немного быстрее по сравнению со Scanner, потому что nextLine() анализирует данные, а readLine() просто считывает последовательность символов.

Так работает readLine():

И на экран, соответственно, выводится:

Метод nextLine()

NextLine() в Java применяется для класса Scanner. Этот метод так же, как и readLine(), нужен для получения и чтения данных, написанных пользователем. Чтобы применить nextLine(), в коде нужно прописать объект Scanner.

Этот метод читает и воспроизводит данные до конца строки. Другими словами, он может считывать информацию до тех пор, пока не начнется новая строка или старая не будет разорвана с помощью \n или Enter.

Вот как nextLine() работает в Java:

Что пишет пользователь:

Что показывает программа:

Метод nextLine работает с данными только одной строки, поэтому остальное стихотворение теряется из-за разрыва между предложениями и перехода на новую строчку.

Чтобы показать стих полностью, нужно написать следующий код:

Классы-обертки в Java

Класс-обертка — это класс, объект которого содержит примитивные типы данных. Когда мы создаем объект для класса-обертки, он содержит поле, в котором мы можем хранить примитивные типы данных.

Как работают классы-обертки:

  • Они преобразуют примитивные типы данных в объекты. Это необходимо, когда мы хотим изменить аргументы, передаваемые через метод (поскольку примитивные типы передаются только через value).
  • В пакете java.util классы могут обрабатывать только объекты, и в этом случае помогут обертки.
  • Чтобы работать в коллекциях ArrayList и Vector, потребуются объекты, а не примитивные типы.
  • Классы-обертки необходимы для поддержки синхронизации в режиме многопоточности.

В коде процесс создания классов-оберток выглядят так:

А если нужно совершить обратный процесс и преобразовать класс-обертку в примитивный тип, то придется совершить unboxing или распаковку данных:

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .


В предыдущих лекциях мы познакомились с командами вывода на экран. Для этого мы использовали объект System.out , и его методы print() и println() . Просто и удобно.

Но, как вы уже наверное догадываетесь, одного вывода на экран недостаточно. Цель большинства программ — сделать что-то полезное для пользователя. Поэтому очень часто нужно, чтобы пользователь мог вводить данные с клавиатуры.

Как и для вывода, для ввода данных тоже есть специальный объект — System.in . Но, к сожалению для нас, он не настолько удобен, как нам бы хотелось. Этот объект позволяет считывать данные с клавиатуры по одному символу за раз.

Поэтому мы воспользуемся еще одним классом, который в паре с объектом System.in даст нам все, что нужно. В Java уже давно есть классы на все случаи жизни. С одним из них мы сейчас и познакомимся.

2. Класс Scanner

Считывание с клавиатуры с помощью объекта типа Scanner будет выглядеть примерно так:

Код Пояснение
Создаем объект класса Scanner .
Читаем с клавиатуры строку текста .
Читаем с клавиатуры число .

Выглядит вроде несложно, но так ли все просто на самом деле?

Думаю, у вас появилась куча вопросов, и сейчас мы на них ответим.

Но для начала продемонстрируем пример полной программы, где используется класс Scanner :

3. Создание объекта Scanner

Такая строка может сбивать с толку, однако вы будете постоянно встречать похожие вещи. Так что, думаем, настало время объяснить, что тут написано.

Вспомним, как мы обычно создаем переменную с текстом:

Сначала мы пишем тип переменной ( String ), затем ее имя ( str ) и, наконец, после знака равно пишем значение.

В нашей странной строке на самом деле все то же самое:

Объявление и инициализация переменной типа Scanner

Все, что находится слева от знака равно — это объявление переменной типа Scanner по имени console . Можно было назвать ее, например, s или scanner , или даже keyboard . Тогда код выглядел бы так:

Думаю, теперь все стало гораздо понятнее.

А код, что находится справа от знака равно , немного сложнее. Имеется в виду new Scanner(System.in); Но тут тоже ничего космического.

В этом коде мы говорим Java-машине: создай новый объект (слово new ) типа Scanner и передай в него в качестве параметра то, из чего новосозданный объект Scanner будет брать данные — объект System.in .

После выполнения всей этой строки у нас появится переменная по имени console типа Scanner , с помощью которой наша программа сможет считывать данные с клавиатуры.

4. Вызов методов

В приведенном выше примере наша переменная console типа Scanner хранила у себя внутри ссылку на объект типа Scanner .

Чтобы вызвать методы объекта, на который ссылается переменная, нужно после имени переменной написать точку, а затем имя метода и параметры. Общий вид этой команды такой:

Вызов метода объекта, на который ссылается переменная

Если вы не планируете передавать в функцию параметры, нужно писать просто пустые скобки:

5. Ввод данных с консоли

Вводить данные с клавиатуры, когда у нас есть объект типа Scanner , очень легко.

Чтобы считать с клавиатуры строку , нужна команда:

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

Чтобы считать с клавиатуры число , нужна команда:

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

Если пользователь ввел данные, которые невозможно преобразовать в целое число, в программе возникнет ошибка, и она завершится.

Чтобы считать с клавиатуры дробное число , нужна команда:

Эта команда полностью аналогична команде nextInt() , только она проверяет, что введенные данные можно преобразовать в число double .

Пример программы, которая считывает с клавиатуры два числа и выводит их сумму:

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

Считай с клавиатуры три строки. А затем: 1. Выведи на экран третью строку в неизменном виде. 2. Выведи на экран вторую строку, предварительно преобразовав ее к верхнему регистру. 3. Выведи на экран первую строку, предварительно преобразовав ее к нижнему регистру. Пример ввода: Строка Номер РАЗ Втор Считай с клавиатуры три целых числа. Выведи на экран их среднее арифметическое. Пример ввода: 50 101 201 Пример вывода: 117 Среднее арифметическое - это число, равное сумме всех чисел, деленной на их количество. Используй деление без остатка.

6. Другие методы класса Scanner

Это, кстати, были не все методы класса Scanner . Полный список будет выглядеть примерно так:

Метод Описание
Считывает данные и преобразует их в тип byte
Считывает данные и преобразует их в тип short
Считывает данные и преобразует их в тип int
Считывает данные и преобразует их в тип long
Считывает данные и преобразует их в тип float
Считывает данные и преобразует их в тип double
Считывает данные и преобразует их в тип boolean
Считывает одно «слово». Слова разделяются пробелами или enter
Считывает целую строку

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

Метод Описание
Там тип byte ? Его можно будет преобразовать к byte ?
Там тип short ? Его можно будет преобразовать к short ?
Там тип int ? Его можно будет преобразовать к int ?
Там тип long ? Его можно будет преобразовать к long ?
Там тип float ? Его можно будет преобразовать к float ?
Там тип double ? Его можно будет преобразовать к double ?
Там тип boolean ? Его можно будет преобразовать к boolean ?
Там есть еще одно слово?
Там есть еще одна строка?

7. Ввод данных из строки

Мы уже говорили выше, что класс Scanner умеет считывать данные из разных источников. И один из этих источников — строка текста .

Вывод на консоль

Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом консоли на следующую строку:

В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.

Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n :

Если у нас есть два числа, и мы хотим вывести их значения на экран, то мы можем, например, написать так:

Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:

  • %x : для вывода шестнадцатеричных чисел
  • %f : для вывода чисел с плавающей точкой
  • %e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
  • %c : для вывода одиночного символа
  • %s : для вывода строковых значений
System . out . printf ( "Имя: %s Возраст: %d лет Рост: %.2f метров \n" , name , age , height ) ;

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

Имя: Иван Возраст: 30 лет Рост: 1,70 метров

Консольный ввод

Для получения консольного ввода в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in. Например, создадим маленькую программу, которая осуществляет ввод чисел:

Так как класс Scanner находится в пакете java.util, то мы вначале его импортируем. Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.

В данном случае в цикле вводятся все элементы массива, а с помощью другого цикла все ранее введенные элементы массива выводятся в строчку.

Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:

  • next() : считывает введенную строку до первого пробела
  • nextLine() : считывает всю введенную строку
  • nextInt() : считывает введенное число int
  • nextDouble() : считывает введенное число double
  • hasNext() : проверяет, было ли введено слово
  • hasNextInt() : проверяет, было ли введено число int
  • hasNextDouble() : проверяет, было ли введено double

Кроме того, класс Scanner имеет еще ряд методов nextByte/nextShort/nextFloat/nextBoolean, которые по аналогии с nextInt считывают данные определенного типа данных.

Консоль (console) в Java обеспечивает простое и удобное взаимодействия с пользователем. С помощью консоли можно выводить какую-нибудь информацию либо, напротив, используя консоль, считывать данные. В этой статье будет рассказано о том, как осуществляется ввод и вывод данных в консоли Java.

Чтобы обеспечивать взаимодействие с консолью, в языке программирования Java используют класс System.

Вывод на консоль в Java

Чтобы создать потока вывода в вышеупомянутый класс System, вам понадобится специальный объект out. В нём определен метод println, обеспечивающий вывод значения на консоль и перевод курсора консоли на другую строку.

Рассмотрим практический пример с Hello world:

Что здесь происходит? В метод println осуществляется передача значения (в нашем случае это строка), которое пользователь желает вывести в консоль Java. Консольный вывод данных в Джава будет следующий:

Выполнять перевод строки не обязательно. Если необходимость в этом отсутствует, применяют метод System.out.print() . Он аналогичен println, но перевод каретки на следующую строку не выполняется.

Вывод в консоли Java:

Однако никто не мешает, используя System.out.print, всё же выполнить перенос на следующую строку. Как вариант — использование \n:

Также есть возможность подставить в строку Ява данные, которые объявлены в переменных. Вот, как это реализуется:

В консоли увидим:

Ещё в Java существует функция, предназначенная для форматирования вывода в консоли, — System.out.printf() . При использовании со спецификаторами, она позволяет добиться нужного формата вывода.

Спецификаторы: • %d — для вывода в консоль целочисленных значений; • %x — для 16-ричных чисел; • %f — выводятся числа с плавающей точкой; • %e — для чисел в экспоненциальной форме (1.3e+01); • %c — вывод в консоль одиночного символа; • %s — вывод в консоль строковых значений.

Рассмотрим, как это функционирует на практике:

Когда осуществляется вывод в консоль Java значений с плавающей точкой, есть возможность задать количество знаков после запятой. Спецификатор %.2f (точнее, «.2») определяет, что будет 2 знака после запятой. Вывод в консоль Java будет следующим:

Ввод с консоли Java или как ввести данные с консоли Джавы

Чтобы обеспечить ввод с консоли Java, в классе System есть объект in. Именно через объект System.in работать не очень удобно, поэтому часто применяют класс Scanner. Он уже, в свою очередь, как раз таки и применяет System.in.

Рассмотрим практический пример:

Сам по себе класс Scanner хранится в пакете java.util, поэтому в начале кода мы выполняем его импорт посредством команды import java.util.Scanner.

Для создания непосредственно объекта Scanner в его конструктор осуществляется передача объекта System.in. Далее можно получать значения. В нашей мини-программе сначала выводится просьба ввести номер, а потом введённое пользователем число помещается в переменную num (для получения введённого значения задействуется метод in.nextInt() , возвращающий набранное на клавиатуре целочисленное значение.

Лучше всего попробовать работу этой программы с помощью одного из многочисленных онлайн-компиляторов.

Для класса Scanner предусмотрены и другие методы: • next() — для считывания введённой строки до первого пробела; • nextLine() — для всей введённой строки; • nextInt() — считывает введённое число int; • nextDouble() — для double; • nextBoolean() — для boolean; • nextByte() — для byte; • nextFloat() — для float; • nextShort() — для short.

Давайте напишем простую программу, обеспечивающую ввод информационных данных о человеке в консоль Java:

В этой программке пользователь последовательно вводит данные разных типов: String, int и float. Потом вся информация выводится в консоль Java:

Вот и всё. Это базовые вещи, если же вас интересуют более продвинутые знания, записывайтесь на курс OTUS в Москве:

Работа с консолью в Java. Классы InputStreamReader , PrintStream . Создание потока ввода/вывода связанного с консолью. Перенаправление потоков ввода/вывода в файл, из файла, из строки. Примеры

Содержание

  • 1. Создание потока ввода, связанного с консолью. Класс InputStreamReader
  • 2. Создание потока вывода, связанного с консолью. Класс PrintStream . Методы print() , println() . Пример
  • 3. Класс InputStreamReader . Чтение символов из консоли с помощью метода read() . Примеры
  • 4. Чтение символов из консоли с буферизацией. Классы InputStreamReader , BufferedStreamReader . Пример
  • 5. Запись данных, выводимых на консоль. Вывод массива вещественных чисел в консоль. Класс PrintStream . Пример
  • 6. Чтение строк из консоли с поддержкой буферизации и вывод их на экран. Классы InputStreamReader , BufferedStreamReader . Метод readLine() . Пример
  • 7. Чтение строк из консоли и запись их в файл. Классы InputStreamReader , BufferedReader , FileInputStream , PrintStream . Пример
  • 8. Чтение строк из символьного файла и вывод их на консоль. Класс FileReader . Пример
  • 9. Классы PrintStream , FileOutputStream . Перенаправление потока вывода из строки String в файл. Пример

Поиск на других ресурсах:

1. Создание потока ввода, связанного с консолью. Класс InputStreamReader

Поток ввода данных из консоли можно организовать одним из двух способов:

  • с помощью потока ввода байтов;
  • с помощью потока ввода символов. В этом случае данные, которые вводятся из консоли, считываются из стандартного потока ввода, которому соответствует переменная System.in из пакета java.lang . Иными словами, переменная System.in ссылается на стандартный поток ввода, которым, по умолчанию, считается клавиатура.

В языке Java для реализации операций ввода из консоли используется класс InputStreamReader . Этот класс есть подклассом абстрактного базового класса Reader и предназначен для конвертирования байт в символы.

Чтобы получить объект типа InputStreamReader нужно создать экземпляр этого типа по следующей общей форме

  • objStream – экземпляр, который связан с потоком ввода символов;
  • inputStream – поток ввода символов. В случае с консолью, этим потоком выступает переменная System.in .

Значит, для потока System.in , чтобы создать экземпляр (объект) типа InputStreamReader , нужно вызвать следующий конструктор

2. Создание потока вывода, связанного с консолью. Класс PrintStream . Методы print() , println() . Пример

В пакете java.lang реализованы две переменные, которые связаны с потоком записи данных на консоль:

  • System.out . Эта переменная соответствует потоку вывода на консоль;
  • System.err . Эта переменная связана с потоком вывода ошибок.

Для работы с выводом на консоль разработан специальный класс PrintStream , который есть производным от класса OutputStream . В этом классе основными являются методы print() и println() .

Чтобы создать поток вывода, связанный с консолью, нужно объявить экземпляр класса PrintStream . При создании экземпляра нужно связать его с соответствующим потоком как показано в следующем примере

Результат выполнения программы

3. Класс InputStreamReader . Чтение символов из консоли с помощью метода read() . Примеры

Как известно, с консолью связана стандартная переменная System.in . Чтобы прочитать символы из консоли без буферизации можно использовать возможности класса InputStreamReader . Класс InputStreamReader есть подклассом абстрактного класса Reader . Класс InputStreamReader предназначен для конвертирования байт в символы.

Основным методом класса InputStreamReader есть метод read() , который имеет две перегруженные реализации. Первая реализация имеет следующую общую форму

В этом случае метод возвращает код введенного символа из консоли.

Общая форма второй реализации метода следующая

Здесь метод заполняет массив ac типа char[] введенными значениями символов из консоли. Параметр count задает количество символов, которые нужно вставить в массив ac . Для массива ac предварительно может быть выделена память. Второй вариант метода возвращает количество символов, которые могут быть прочитаны.

Пример 2. Использование метода read() , который обрабатывает массив типа char[] .

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

Такой подход реализует паттерн Декоратор (Decorator). В паттерне Декоратор экземпляр одного класса служит оболочкой для экземпляра другого класса. Таким образом происходит наслаивание объектов.

Ниже приведен пример функции ReadConsoleBuf() , которая реализует чтение символов из консоли с буферизацией.

5. Запись данных, выводимых на консоль. Вывод массива вещественных чисел в консоль. Класс PrintStream . Пример

Пример есть демонстрационным. Вывод происходит в экземпляр класса PrintStream , который связан с консолью (переменной System.out ).

6. Чтение строк из консоли с поддержкой буферизации и вывод их на экран. Классы InputStreamReader , BufferedStreamReader . Метод readLine() . Пример

Читать строки из консоли можно используя буферизацию или без нее. Если используется механизм буферизации, то класс InputStreamReader помещается в конструктор класса BufferedReader .

Чтение одной строки осуществляется с помощью функции readLine() .

Результат выполнения программы:

7. Чтение строк из консоли и запись их в файл. Классы InputStreamReader , BufferedReader , FileInputStream , PrintStream . Пример

В примере продемонстрировано перенаправление ввода с консоли в текстовый файл.

Результат выполнения программы:

8. Чтение строк из символьного файла и вывод их на консоль. Класс FileReader . Пример

Пусть задан символьный (текстовый) файл, который нужно вывести на консоль. Чтение строк из файла можно реализовать с помощью метода read() класса FileReader . Строка из файла читается в заведомо выделенный участок памяти – буфер.

Чтобы определить конец файла нужно использовать метод ready() класса FileReader . Если конец файла, то метод возвращает false .

9. Классы PrintStream , FileOutputStream . Перенаправление потока вывода из строки String в файл. Пример

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

Чтобы реализовать запись строки в файл нужно выполнить следующие действия:

  • создать экземпляр класса FileOutputStream с именем файла, в который будет осуществляться запись строки;
  • создать экземпляр класса PrintStream , в конструктор которого поместить созданный экземпляр класса FileOutputStream ;
  • использовать один из методов print() или println() для записи строки в файл.

Фрагмент программного кода, осуществляющего перенаправление потока вывода из строки в файл, следующий

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

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