Entrada de datos. Lectura de datos por teclado en Java. Scanner y BufferedReader

La entrada o lectura de datos en Java es uno de los conceptos más importantes y fundamentales al momento de interactuar con el usuario de nuestro programa. La entrada de datos en Java, a diferencia de otros lenguajes es un poco complicada (no demasiado) y existen diferentes formas de hacerlo, unas más complejas que otras. En esta sección veremos dos maneras sencillas de leer datos para nuestro programa en Java, veremos entonces dos formas de leer datos del usuario por teclado. La primera usando las clases BufferedReader y InputStreamReader ambas de la librería java.io y la segunda con la clase Scanner de la librería java.util.

Comencemos entonces nuestros ejemplos para la lectura por teclado en Java usando la clase BufferedReader y InputStreamReader.

Lectura de datos por teclado con BufferedReader y InputStreamReader

La entrada de datos con estas dos clases se puede hacer un menos de tres líneas según lo que necesitemos hacer, veremos cómo leer números y texto y las particularidades de ambos casos al usar estas clases.

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class EntradaJava { public static void main(String[] args) throws IOException { //Notar que readLine() nos obliga a declarar IOException BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //Ya tenemos el "lector" System.out.println("Por favor ingrese su nombre");//Se pide un dato al usuario String nombre = br.readLine(); //Se lee el nombre con readLine() que retorna un String con el dato System.out.println("Bienvenido " + nombre + ". Por favor ingrese su edad");//Se pide otro dato al usuario String entrada = br.readLine(); //Se guarda la entrada (edad) en una variable //Nótese que readLine siempre retorna String y la clase BufferedReader... //no tiene un método para leer enteros, así que debemos convertirlo. int edad = Integer.parseInt(entrada);//Se transforma la entrada anterior en un entero //Si el usuario ingresó solo números funcionará bien, de lo contrario generará una excepción System.out.println("Gracias " + nombre + " en 10 años usted tendrá " + (edad + 10) + " años."); //Operacion numerica con la edad } }

Como pudimos ver en el código anterior, ha sido bastante sencillo obtener la entrada del usuario y almacenar ese valor en una variable. El único "problema" es que BufferedReader únicamente posee el método readLine() para leer la entrada y este siempre retorna String, de modo que para obtener un número debemos leer primero como String y luego enviarle dicho String al método parseInt() de la clase Integer. Hay que ser muy cuidadosos con Integer.parseInt() pues si el usuario no ingreso un número sino letras, se disparará una excepción que debemos controlar (más adelante veremos esto con detalle).

Lectura de entrada por teclado usando la clase Scanner

La clase Scanner de la librería java.util es también muy sencilla para obtener datos de entrada del usuario, a diferencia de BufferedReader, Scanner si posee un método para la lectura de números y para la lectura de texto que nos ayudarán a facilitar un poco las cosas, veamos:

import java.util.Scanner; public class EntradaJava2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //Se crea el lector System.out.println("Por favor ingrese su nombre");//Se pide un dato al usuario String nombre = sc.nextLine(); //Se lee el nombre con nextLine() que retorna un String con el dato System.out.println("Bienvenido " + nombre + ". Por favor ingrese su edad");//Se pide otro dato al usuario int edad = sc.nextInt(); //Se guarda la edad directamente con nextInt() //Nótese que ya no hubo necesidad de usar parseInt() pues nextInt nos retorna un entero derectamente System.out.println("Gracias " + nombre + " en 10 años usted tendrá " + (edad + 10) + " años."); //Operacion numerica con la edad } }

Con este código hemos podido realizar la lectura de datos del usuario muy fácil, pues ya no nos tuvimos que preocupar por el tipo de dato, solo debemos usar el método adecuado según sea entero, String, float, etc.

Muy bien, creo que ha sido todo en esta sección, espero todo haya sido muy claro, no olvides dejar tus comentarios en la sección de comentarios. No olvides darle una mirada a las secciones de librerias en java y objetos y clases.

La última actualización de este artículo fue hace 5 años

Foto de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

...

Si te parece bien, te enviaré de vez en cuando, mensajes de interés sobre los temas que se tratan en el sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encuentres.

Por supuesto, puedes cancelar tu suscripción en cualquier momento.