3 formas para leer la entrada del usuario desde la consola en Java
En este artículo, discutimos tres maneras diferentes para leer la entrada del usuario en el entorno de línea de comandos (también conocido como la «consola»). Cada forma es bastante fácil de usar y también tiene sus propias ventajas e inconvenientes.
Lectura de la entrada del usuario utilizando la clase BufferedReader
Envolviendo el System.in (flujo de entrada estándar) en un InputStreamReader que está envuelto en un BufferedReader, podemos leer la entrada del usuario en la línea de comandos. Aquí hay un ejemplo:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.print("Enter your name: ");String name = reader.readLine();System.out.println("Your name is: " + name);
En el ejemplo anterior, el método readLine() lee una línea de texto de la línea de comandos.Advantages: La entrada se almacena en búfer para una lectura eficiente.Inconvenientes: El código de envoltura es difícil de recordar.
Lectura de la entrada del usuario usando la clase Scanner
El propósito principal de la clase Scanner (disponible desde Java 1.5) es analizar tipos primitivos y cadenas usando expresiones regulares, sin embargo también se puede usar para leer la entrada del usuario en la línea de comandos. Aquí hay un ejemplo:
Scanner scanner = new Scanner(System.in);System.out.print("Enter your nationality: ");String nationality = scanner.nextLine();System.out.print("Enter your age: ");int age = scanner.nextInt();
Ventajas:
- Métodos convenientes para analizar primitivas (nextInt(), nextFloat(), …) desde la entrada tokenizada.
- Se pueden utilizar expresiones regulares para encontrar tokens.
- Los métodos de lectura no están sincronizados.
Desventajas:
Aprende más: Tutorial de escáner Java y ejemplos de código
Lectura de la entrada del usuario mediante la clase Console
La clase Console fue introducida en Java 1.6, y se ha ido convirtiendo en la forma preferida para leer la entrada del usuario desde la línea de comandos. Además, se puede utilizar para leer la entrada de tipo contraseña sin hacer eco de los caracteres introducidos por el usuario; también se puede utilizar la sintaxis de la cadena de formato (como System.out.printf()). Aquí hay un fragmento de código de ejemplo:
Console console = System.console();if (console == null) {System.out.println("No console: non-interactive mode!");System.exit(0);}System.out.print("Enter your username: ");String username = console.readLine();System.out.print("Enter your password: ");char password = console.readPassword();String passport = console.readLine("Enter your %d (th) passport number: ", 2);
Ventajas:
- Lectura de la contraseña sin hacer eco de los caracteres introducidos.
- Los métodos de lectura están sincronizados.
- Se puede utilizar la sintaxis de cadena de formato.
Inconvenientes:
- No funciona en un entorno no interactivo (como en un IDE).
Aprende más: Ejemplos de entrada y salida de la consola de Java
Programa de ejemplo de lectura de la entrada del usuario en Java
Para su comodidad y como referencia, combinamos el fragmento de código anterior en un programa de demostración cuyo código fuente tiene el siguiente aspecto:
package net.codejava.io;import java.io.*;import java.util.*;public class UserInputConsoleDemo {public static void main(String args) {// using InputStreamReadertry {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.print("Enter your name: ");String name = reader.readLine();System.out.println("Your name is: " + name);} catch (IOException ioe) {ioe.printStackTrace();}// using ScannerScanner scanner = new Scanner(System.in);System.out.print("Enter your nationality: ");String nationality = scanner.nextLine();System.out.println("Your nationality is: " + nationality);// using ConsoleConsole console = System.console();if (console == null) {System.out.println("No console: not in interactive mode!");System.exit(0);}System.out.print("Enter your username: ");String username = console.readLine();System.out.print("Enter your password: ");char password = console.readPassword();System.out.println("Thank you!");System.out.println("Your username is: " + username);System.out.println("Your password is: " + String.valueOf(password));// using Console with formatted promptString job = console.readLine("Enter your job: ");String passport = console.readLine("Enter your %d (th) passport number: ", 2);System.out.println("Your job is: " + job);System.out.println("Your passport number is: " + passport);}}
Vea el vídeo:
- Consola clase Javadoc
- I/O desde la línea de comandos – Los tutoriales de Java
- Escáner clase Javadoc
- BufferedReader clase Javadoc
Tutoriales relacionados:
- Ejemplos de entrada y salida de la consola de Java
- Tutorial de escáner de Java y ejemplos de código
Otros tutoriales de IO de archivos de Java:
- Cómo leer y escribir archivos de texto en Java
- Cómo leer y escribir archivos binarios en Java
- Java IO – Ejemplos de operaciones comunes de archivos y directorios
- Ejemplo básico de serialización en Java
- Cómo entender la externalización en Java con ejemplos
- Cómo comprimir archivos en formato ZIP en Java
- Cómo extraer un archivo ZIP en Java
Acerca del autor:
Nam Ha Minh es programador Java certificado (SCJP y SCWCD). Empezó a programar con Java en la época de Java 1.4 y se ha enamorado de Java desde entonces. Hazte amigo de él en Facebook y mira sus vídeos de Java en YouTube.