Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью

Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

7.8. Работа приложения Java с консолью

Приложение показывает несложные приемы ввода с системной консоли текстовых строк и целых чисел, а также отображение текстовых строк на консоли.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Консольное автономное приложение Java, не создающее окон на базе класса Frame, общается с пользователем через символьную консоль (подобно старым программам DOS).

Для работы с консолью в классе java.lang.System определены так называемые стандартные потоки, предназначенные для ввода данных с клавиатуры, вывода обычных сообщений и сообщений об ошибках.

Стандартный поток ввода определен следующим образом:

public static final InputStream in;

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

При работе с клавиатурой этот метод возвращает количество прочитанных символов.

Для вывода обычных сообщений используется стандартный поток вывода:

public static final PrintStream out;

Для работы с этим потоком обычно используются методы print и println. Метод println в отличие от метода print после вывода текстового представления переданного ему аргумента выполняет перевод строки.

В классе PrintStream определено несколько реализаций метода print и println с параметрами различных типов. Вот список реализаций метода print:

public void print(boolean b);
public void print(char c);
public void print(char s[]);
public void print(double d);
public void print(float f);
public void print(int i);
public void print(long l);
public void print(Object obj);
public void print(String s);

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

public static final PrintStream err;

Для работы с этим потокам вы также можете использовать методы print и println.

Описание примера

Наше консольное приложение вводит в цикле строки и числа, отображая их на консоли:

* Console I/O demonstration

Enter string ('quit' to exit): Test String
String: Test String
Enter intger number: 123
Number: 123
Enter string ('quit' to exit): Hello!
String: Hello!
Enter intger number: 3567
Number: 3567
Enter string ('quit' to exit): quit
String:quit

Цикл завершится, если пользователь введет строку quit.

Рассмотрим исходный текст приложения.

Метод main

В главном классе мы определили статический метод main, который получает управление сразу после запуска приложения, а также методы getKbdString и getKbdInt. Метод getKbdString предназначен для ввода с консоли текстовых строк, а метод getKbdInt - для ввода с консоли целых чисел.

Введенные строки и числа сохраняются на время работы одной итерации цикла в переменных s и i, соответственно:

String s;
int i;

Получив управление, метод main первым делом выводит на консоль сообщение:

System.out.println(
  "* Console I/O demonstration\n");

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

Далее запускается цикл:

while(true)
{    
  System.out.print(
    "Enter string ('quit' to exit): ");
  s = new String(getKbdString());
  System.out.println("String: " + s);
      
  if(s.equals("quit"))
    break;
    
  System.out.print(
    "Enter intger number: ");
  i = getKbdInt();
  System.out.println("Number: " + i);
}  

В этом цикле мы сначала выводим приглашение для ввода текстовой строки, а затем вводим эту строку методом getKbdString, определенным в нашем приложении. Если пользователь ввел строку "quit", цикл завершает свою работу.

Если введена другая строка, метод main выводит на консоль приглашение для ввода целого числа. Число вводится методом getKbdInt.

Вся введенная информация отображается на консоли.

Метод getKbdString

Для ввода с клавиатуры текстовых строк мы определили метод getKbdString:

static public String getKbdString()
{
  . . .
}

Внутри тела метода мы предусмотрели три переменные:

byte bKbd[] = new byte[256];
int iCnt = 0;
String szStr = "";

Массив байт bKbd заполняется символами, введенными с клавиатуры. В переменную iCnt записывается количество этих символов. И, наконец, в переменной szStr хранится строка, сформированная из массива bKbd.

Ввод символов с клавиатуры выполняется методом read:

try
{
  iCnt = System.in.read(bKbd);
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

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

Когда пользователь введет строку символов и нажмет клавишу <Enter>, метод read возвратит управление. При этом в переменную iCnt будет записано количество введенных символов.

Пользуясь этой информацией, мы формируем из массива введенных символов текстовую строку класса String:

szStr = new String(bKbd, 0, iCnt);

Далее мы удаляем из строки все служебные символы (в частности, символы возврата каретки и перевода строки):

szStr = szStr.trim();

Результат возвращается оператором return:

return szStr;

Метод getKbdInt

Для ввода с клавиатуры целых чисел мы определили несложный метод getKbdInt:

static public int getKbdInt()
{
  String szStr = getKbdString();
    
  Integer intVal = new Integer(szStr);
  return intVal.intValue();
}

Здесь мы просто вызываем метод getKbdString и преобразуем введенную этим методом строку сначала к типу Integer, а затем к типу int. Оператор return возвращает результат такого преобразования.


Назад Вперед

  

[Назад]