miércoles, 20 de agosto de 2008

Entrada y salida con la clase java.io.Console

Esta clase posee métodos para acceder a la consola que se encuentre asociada a la JVM (Máquina Virtual de Java) actual.
Nos permite leer cadenas y contraseñas de forma fácil siempre y cuando haya una consola asociada a nuestra aplicación.

Esta clase puede ser utilizada desde Java 6.

Observa el primer ejemplo:

import java.io.Console;

public class UsoDeConsola1 {
public static void main (String args[]){

Console consola= System.console();

//si consola es null significa que no podremos utilizar esta clase
if (consola==null){
System.out.printf ("No existe una consola asociada a esta JVM");
System.exit(0); //Termina la aplicación
}

consola.printf("Ingresa al sistema\n");

String user= consola.readLine("user: ");
char password[] = consola.readPassword("pass: ");

//convierte el arreglo de caracteres en un String
String pass= new String (password);

consola.printf("\nEl usuario introducido es: " + user + ", y el password es: " + pass);
}
}

En este ejemplo, primero se verifica si existe una consola (consola==null). Luego se lee muestra el mensaje "user: " y se espera que el usuario introduzca el nombre de usuario. Luego se muestra el mensaje "pass: " y se lee la contraseña del usuario (pero sin mostrarla).

Como pudiste observar, el método readLine() se utiliza para leer cadenas, y el método readPassword() se utiliza para leer contraseñas sin mostrarlas mientras se escribe. El método readPassword() lee un arreglo de caracteres, por eso se tuvo que convertir a un String antes de imprimirlo. Ambos métodos reciben una cadena para mostrar al usuario.

Otras formas de hacer lo mismo serían:

Ejemplo2:

consola.printf("Ingresa al sistema\n");

String mensaje1="user: ", mensaje2="pass: ";

String user= consola.readLine("%s", mensaje1);
char password[] = consola.readPassword("%s",mensaje2);

En este caso se utilizó la versión de los métodos de lectura que funciona similar al método prinf().

Ejemplo3:

consola.printf("Ingresa al sistema\n");

consola.printf("user: ");
String user= consola.readLine();
consola.printf("pass: ");
char password[] = consola.readPassword();

En este último ejemplo, los mensajes se imprimieron en instrucciones separadas y no en los métodos para leer.

No hay comentarios: