Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Предопределенные потоки. Чтение консольного ввода. Класс PrintWriter




Предопределенные потоки

Как вы знаете, все Java-программы автоматически импортируют пакет java. lang.

В этом пакете определен класс System, инкапсулирующий некоторые аспекты среды времени выполнения. Например, используя некоторые из его методов, можно получить текущее время и настройки различных параметров, ассоциированных с системой. System также содержит три предопределенных потоковых переменных: in, out и err. Эти переменные объявлены как public, static и final в классе System. Это значит, что они могут быть использованы любой другой частью вашей программы без обращения к специфическому объекту System.

· System. out ссылается на стандартный выходной поток. По умолчанию это консоль.

· System. in ссылается на стандартный входной поток, который также по умолчанию является консолью. System. err ссылается на стандартный поток ошибок, который также по умолчанию связан с консолью. Однако эти потоки могут быть перенаправлены на любое совместимое устройство ввода-вывода.

System. in — это объект типа InputStream, System. out и System. err — объекты типа PrintStream. Это байтовые потоки, хотя обычно они используются для чтения и записи символов с консоли и на консоль.

Чтение консольного ввода

В Java 1. 0 единственным способом выполнения консольного ввода было использование байтового потока, и существует большой объем старого кода, в котором применяется этот подход. Сегодня применение байтового потока для чтения консольного ввода попрежнему технически возможно, но поступать так не рекомендуется. Предпочтительный метод чтения консольного ввода — это использовать символ-ориентированный поток, что значительно упрощает возможности интернационализации и поддержки разрабатываемых программ.

В Java консольный ввод выполняется чтением System. in. Чтобы получить символьный поток, присоединенный к консоли, вы должны поместить System. in в оболочку объекта BufferedReader. BufferedReader поддерживает буферизованный входной поток. Наиболее часто используемый его конструктор выглядит так:

BufferedReader(Reader inputReader)

Здесь inputReader — это поток, который связывается с создаваемым экземпляром BufferedReader. Reader — абстрактный класс. Одним из его конкретных наследников является InputStreamReader, который преобразует байты в символы. Для получения объекта InputStreamReader, который присоединен к System. in, служит следующий конструктор:

InputStreamReader(InputStream inputStream)

Поскольку System. in ссылается на объект типа InputStream, он должен быть использован как параметр inputStream. Собрав все вместе, получим следующую строку кода, которая создает BufferedReader, соединенный с клавиатурой:

BufferedReader br = new BufferedReader(new

InputStreamReader(System. in));

После выполнения этого оператора br представляет собой основанный на символах поток, подключенный к консоли через System. in.

Т. к. наша основная цель – изучение базового синтаксиса и ключевых понятий языка Java мы не будем подробно разбирать работу с System. in. Далее приведен простой пример работы с чтением строк с консоли:

// Чтение строк с консоли с применением BufferedReader.

import java. io. *;

class BRReadLines {

public static void main(String args[]) throws IOException

{

// Создать BufferedReader с использованием System. in

BufferedReader br = new BufferedReader(new InputStreamReader(System. in));

String str;

System. out. println(" Вводите строки текста. " );

BookNew_JAVA-7. indb 316 02. 06. 2007 1: 07: 08

Глава 13. Ввод-вывод, аплеты и другие темы 317

System. out. println(" Введите 'стоп' для завершения. " );

do {

str = br. readLine();

System. out. println(str);

} while(! str. equals(" стоп" ));

}}

Класс PrintWriter

Хотя применение System. out для вывода на консоль допустимо, он рекомендуется в основном для целей отладки или для примеров программ вроде тех, что приводятся в настоящей книге. Для реальных программ рекомендуемым способом записи на консоль при использовании Java является поток PrintWriter. PrintWriter — это один из классов, основанных на символах. Применение такого класса для консольного вывода упрощает интернационализацию ваших программ.

PrintWriter определяет несколько конструкторов. Один из тех, которые мы будем использовать, показан ниже:

PrintWriter(OutputStream outputStream, boolean flushOnNewline)

Здесь outputStream — объект типа OutputStream, а flushOnNewline управляет тем, будет ли Java сбрасывать буфер в выходной поток каждый раз при вызове метода

println(). Если flushOnNewline равно true, то происходит автоматический сброс буфера, если же false, то это автоматически не делается.

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

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

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

PrintWriter pw = new PrintWriter(System. out, true);

Показанное ниже приложение иллюстрирует применение PrintWriter для управления консольным выводом:

// Демонстрация PrintWriter

import java. io. *;

public class PrintWriterDemo {

public static void main(String args[]) {

PrintWriter pw = new PrintWriter(System. out, true);

pw. println(" Это строка" );

int i = -7;

pw. println(i);

double d = 4. 5e-7;

pw. println(d);

}

}

Вывод этой программы будет выглядеть следующим образом:

Это строка

-7

4. 5E-7

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...