Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

2.2 Стандартные потоки ввода-вывода

Для работы со стандартными потоками в классе System имеется 3 статических объекта: System.in, System.out и System.err. По своему назначению эти потоки больше всего напоминают стандартные потоки ввода, вывода и вывода сообщений об ошибках операционной системы MS-DOS.

Поток System.in (стандартный поток ввода) связан с клавиатурой, потоки System.out (стандартный поток вывода, вывод при помощи этого потока может быть переназначен в файл) и System.err (стандартный поток вывода ошибок) - с консольным выводом приложения Java.

Отметим, что стандартные потоки, как правило, не используются апплетами, так навигаторы WWW общаются с пользователем через окно апплета и извещения от мыши и клавиатуры, а не через консоль.

Стандартный поток ввода

Стандартный поток ввода System.in определен как статический объект класса InputStream, который содержит только простейшие методы для ввода данных. Самые необходимые методы:

public int read();

public int read(byte b[]);

Первый метод читает следующий вводимый с клавиатуры символ, при достижении символа конца ввода метод возвращает -1.

Второй метод читает данные из потока в массив, ссылка на который передается через единственный параметр. Количество считанных данных определяется размером массива, т.е. значением b.length. Метод возвращает количество считанных байт данных или-1, если достигнут конец потока.

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

Замечание. На машинах, работающих с Unix и Dos/Windows, символы конца ввода формируются разными способами. В Unix должны быть использованы символы Ctrl+D (^D), а в среде Dos/Windows используются Ctrl+Z (^Z).

Стандартный поток вывода

Стандартный поток вывода System.out создан на базе класса PrintStream, предназначенного для форматированного вывода данных различного типа с целью их визуального отображения в виде текстовой строки.

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

В классе PrintStream определено несколько реализаций метода 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);

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

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

Стандартный поток вывода сообщений об ошибках

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

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

Рассмотрим приложение TestInOut (пример 2), в котором пользователю предлагается ввести строку, состоящую из чисел, разделенных пробелами. После ввода строка сначала печатается по отдельным словам, а затем по числам, входящим в нее.

/*------------- Пример 2. Файл TestInOut.java -------------*/

class TestInOut

{ public static void main(String ARGV[]) throws java.io.IOException

{ StringBuffer buffer=new StringBuffer();

int c;

System.out.print("Для прекращения ввода используется символ:");

System.out.println("в Windows - Ctrl+Z, в Unix - Ctrl+D");

System.out.println(

"Введите несколько слов (чисел), разделенных пробелом:");

// -------------посимвольный ввод до символа конца ввода

while((c=System.in.read())!=-1)

{ buffer.append((char)c); // добавить символ в буфер

}

// -------------вывод по словам (токенам)

System.out.println("\n\nВведенные слова:");

String string=new String(buffer); // создать по буферу строку

java.util.StringTokenizer tok=new java.util.StringTokenizer(string);

while(tok.hasMoreTokens()) // пока есть токены

{ // получить токен и напечатать

String word=tok.nextToken(); System.out.print(word+" ");

}

// -------------вывод по числам

System.out.println("Введенные числа:");

tok=new java.util.StringTokenizer(string);

while(tok.hasMoreTokens()) // пока есть токены

{ // преобразовать токен в целочисленный упаковщик

Integer I=Integer.valueOf(tok.nextToken());

// получить из упаковщика целое число и напечатать

System.out.print(" "+ I.intValue());

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]