Hay ocasiones en las que es importante que obtengas entradas de los usuarios para la ejecución de los programas. Para ello necesitas los métodos de entrada de la consola de lectura de Java.
Métodos de entrada de la consola de lectura de Java
- Usando la clase BufferedReader
- Usando la clase Scanner
- Usando la clase Console
Ahora vamos a echar un vistazo de cerca a estos métodos uno por uno.
Usando la Clase BufferedReader
Esta es la técnica más antigua de Java utilizada para leer la entrada de la consola. Esta técnica fue introducida por primera vez en el JDK 1.0. Usando esta técnica necesitamos envolver InputStreamReader y System.in en la clase BufferedReader.
Esto se hace usando la siguiente sintaxis:
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
Usando esto se vinculará el flujo basado en caracteres ‘br’ a la consola para la entrada a través de System.in.
NOTA: al utilizar BufferedReader se debe lanzar una IOException, de lo contrario se mostrará un mensaje de error en tiempo de compilación.
La clase BufferedReader está definida en la clase java.io por lo que para utilizar la clase BufferedReader es necesario importar primero java.io.
Veamos un ejemplo para que el concepto quede más claro.
En este ejemplo, obtendremos una cadena de caracteres introducidos por el usuario. El programa mostrará los caracteres uno por uno al usuario en la pantalla. Continuará hasta que se encuentre el carácter de terminación en la cadena.
// Program to read a string using BufferedReader class.import java.io.*;class bread{ public static void main(String args) throws IOException { char ch; BufferedReader br = new BufferedReader(new InputStreamReader (System.in)); System.out.println ("Enter any string of your choice (To terminate Press \'z\' "); do { ch = (char) br.read (); System.out.println (ch); } while (ch != 'z'); }}
Salida 1
Aquí, cuando se encuentre z en la cadena de caracteres, el programa dejará de mostrar cualquier otro carácter introducido por el usuario.
Salida 2
Utilización de la clase Scanner
La clase Scanner fue introducida en el JDK 1.5 y ha sido ampliamente utilizada desde entonces. La clase Scanner proporciona varios métodos para facilitar la forma en que obtenemos la entrada de la consola. La clase Scanner está definida en java.util por lo que es necesario importarla primero.
El Scanner también utiliza System.in y su sintaxis es la siguiente:
Scanner obj_name = new Scanner (System.in);
Algunos de los métodos de utilidad que proporciona la clase Scanner son los siguientes:
hasNext() | Devuelve un valor booleano dependiendo de si hay algún token disponible o no. Devuelve un valor true si hay algún token disponible. En caso contrario devolverá un valor falso. | hasNextInt() | Devuelve un valor true si se está leyendo un valor int. Si no, devolverá un valor falso. | hasNextFloat() | Devuelve un verdadero si se está leyendo un valor float. Si no, devolverá un valor falso. | hasNextBoolean() | Devuelve un verdadero si se está leyendo un valor booleano. En caso contrario devolverá un valor falso. | next() | Lee el siguiente token como una Cadena. |
nextLine() | Lee la siguiente línea de entrada como String. |
nextInt() | Lee el siguiente valor de entrada como un entero. |
nextDouble() | Lee el siguiente valor de entrada como un valor doble. |
Veamos un ejemplo para entender mejor el concepto. En este ejemplo leeremos números de un usuario y encontraremos la suma de estos números y le mostraremos el resultado.
// Program to calculate the sum of n numbers using Scanner classimport java.util.*;class scanner_eg{ public static void main(String args) { Scanner obj = new Scanner (System.in); double total = 0; System.out.println ("Enter numbers to add. Enter any string to end list."); while (obj.hasNext()) { if (obj.hasNextDouble()) { total += obj.nextDouble(); } else { break; } } System.out.println ("Sum of the numbers is " + total); }}
Salida
NOTA: – Siempre que utilicemos el método next, en tiempo de ejecución buscará la entrada que define. Si dicha entrada no está disponible entonces lanzará una excepción. Por lo tanto, siempre es beneficioso comprobar la entrada de antemano utilizando el método hasNext antes de llamar al método next.
Usando la clase Console
Esta es otra forma de leer la entrada del usuario desde la consola en Java. Esta forma de leer la entrada del usuario ha sido introducida en el JDK 1.6. Esta técnica también utiliza System.in para la lectura de la entrada.
Esta técnica es la más adecuada para la lectura de la entrada que no requiere el eco de la entrada del usuario como la lectura de las contraseñas del usuario. Esta técnica lee las entradas del usuario sin hacer eco de los caracteres introducidos por el usuario.
La clase Console está definida en la clase java.io que necesita ser importada antes de usar la clase console.
Consideremos un ejemplo.
import java.io.*;class consoleEg{ public static void main(String args) { String name; System.out.println ("Enter your name: "); Console c = System.console(); name = c.readLine(); System.out.println ("Your name is: " + name); }}
Salida
NOTA: – El único inconveniente de esta técnica es que funciona en entornos interactivos y no funciona en IDE.
En Java podemos leer la entrada de la consola de tres maneras, es decir, utilizando la clase BufferedReader, la clase Scanner y la clase Console en Java. Dependiendo de la forma en que quieras leer la entrada del usuario, puedes implementarla en tus programas.