Spec-Zone .ru
спецификации, руководства, описания, API
|
Программа часто выполняется из командной строки и взаимодействует с пользователем в среде командной строки. Платформа Java поддерживает этот вид взаимодействия двумя способами: через Стандартные Потоки и через Консоль.
Стандартные Потоки являются функцией многих операционных систем. По умолчанию они читают ввод из клавиатуры и вывод записи к дисплею. Они также поддерживают ввод-вывод на файлах и между программами, но той функцией управляет интерпретатор командной строки, не программа.
Платформа Java поддерживает три Стандартных Потока: Стандартный Ввод, к которому получают доступ через System.in
; Стандартный вывод, к которому получают доступ через System.out
; и Стандартная Ошибка, к которой получают доступ через System.err
. Эти объекты определяются автоматически и не должны быть открыты. Стандартный вывод и Стандартная Ошибка оба для вывода; наличие вывода ошибок отдельно позволяет пользователю отклонять регулярный вывод к файлу и все еще быть в состоянии считать сообщения об ошибках. Для получения дополнительной информации сошлитесь на документацию для Вашего интерпретатора командной строки.
Вы могли бы ожидать, что Стандартные Потоки будут символьными потоками, но, по историческим причинам, они - потоки байтов. System.out
и System.err
определяются как PrintStream
объекты. Хотя это - технически поток байтов, PrintStream
использует внутренний символьный потоковый объект, чтобы эмулировать многие из функций символьных потоков.
В отличие от этого, System.in
поток байтов без символьных потоковых функций. Использовать Стандартный Ввод в качестве символьного потока, обертки System.in
в InputStreamReader
.
InputStreamReader cin = new InputStreamReader(System.in);
Более усовершенствованной альтернативой Стандартным Потокам является Консоль. Это - единственный, предопределенный объект типа Console
reader
и writer
методы.
Прежде, чем программа может использовать Консоль, она должна попытаться получить Консольный объект, вызывая System.console()
. Если Консольный объект доступен, этот метод возвращает его. Если System.console
возвраты NULL
, тогда Консольные операции не разрешаются, или потому что ОС не поддерживает их или потому что программа была запущена в неинтерактивной среде.
Консольный объект поддерживает безопасный ввод пароля через readPassword
метод. Этот метод помогает защитить ввод пароля двумя способами. Во-первых, это подавляет повторение, таким образом, пароль не видим на экране пользователя. Во-вторых, readPassword
возвращает символьный массив, не a String
, таким образом, пароль может быть перезаписан, удаляя это из памяти, как только это больше не необходимо.
Password
примером является прототипная программа для того, чтобы изменить пароль пользователя. Это демонстрирует несколько Console
методы.
import java.io.Console; import java.util.Arrays; import java.io.IOException; public class Password { public static void main (String args[]) throws IOException { Console c = System.console(); if (c == null) { System.err.println("No console."); System.exit(1); } String login = c.readLine("Enter your login: "); char [] oldPassword = c.readPassword("Enter your old password: "); if (verify(login, oldPassword)) { boolean noMatch; do { char [] newPassword1 = c.readPassword("Enter your new password: "); char [] newPassword2 = c.readPassword("Enter new password again: "); noMatch = ! Arrays.equals(newPassword1, newPassword2); if (noMatch) { c.format("Passwords don't match. Try again.%n"); } else { change(login, newPassword1); c.format("Password for %s changed.%n", login); } Arrays.fill(newPassword1, ' '); Arrays.fill(newPassword2, ' '); } while (noMatch); } Arrays.fill(oldPassword, ' '); } // Dummy change method. static boolean verify(String login, char[] password) { // This method always returns // true in this example. // Modify this method to verify // password according to your rules. return true; } // Dummy change method. static void change(String login, char[] password) { // Modify this method to change // password according to your rules. } }
Password
class следует за этими шагами:
Console.readLine
запрашивать и читать имя для входа в систему пользователя.Console.readPassword
запрашивать и читать существующий пароль пользователя.verify
подтвердить, что пользователь разрешается изменить пароль. (В этом примере, verify
фиктивный метод, который это всегда возвращает true
.)Console.readPassword
дважды запрашивать и читать новый пароль.change
изменить это. (Снова, change
фиктивный метод.)