Entrada y salida por consola en Java

Frecuentemente, los programas tiene necesidad de comunicarse con un usuario. Los usuarios son las personas que interactúan con los programas.

Esta comunicación tiene dos sentidos; entrada y salida (input  & output):

Veamos como hacer esto en una aplicación de línea de comandos.

Salida por la consola

Una forma fácil de crear una nueva clase con Eclipse es, botón derecho del ratón sobre src - New - Class

Salida por la consola

Dar el nombre de la clase “ConsoleOutput” y seleccionar si queremos el método main. Oprimir finish. Borrar el comentario TODO en el método main y escribir “syso”, luego apretar la tecla Ctrl y la barra de espacios conjuntamente. si todo salió bien “syso” se convirtió en “System.out.println();”. Ctrl-espacio suele dar ayuda en muchas ocasiones.

package com.edu4java.javatutorials;

public class ConsoleOutput {
	public static void main(String[] args) {
		System.out.println("Hello World");
	}
}

El código anterior imprime Hello World por la consola. Con botón derecho del ratón sobre la clase - Run As - Java Application podemos ver "Hello World" en Console View.

Entrada por la consola

Así como imprimimos por la consola, también podemos ingresar datos por la consola.

Crear una clase llamada ConsoleInput con método main de la misma forma que antes. Reemplazar el comentario por:

		InputStream stream = System.in;
		Scanner scanner = new Scanner(stream);
		System.out.println("Name:");
		String input = scanner.next();
		System.out.println("Hello " + input);
		scanner.close();

Se verán errores en rojo en el editor ya que faltan las importaciones:

import java.io.InputStream;
import java.util.Scanner;

Si oprimimos conjuntamente Ctrl+Shift y la letra "o", se agregarán automáticamente. Si Eclipse tiene acceso a más de una clase con el mismo nombre, le dará la opción de elegir el paquete para el import.

Explicación del código

InputStream stream = System.in;

En la primera línea guardamos en stream un objeto mantenido por Java, en una variable de clase in de la clase System.

Este Objeto InputStream es como un flujo de datos que viene del teclado.

Scanner scanner = new Scanner(stream);

En la segunda línea se crea un Objeto Scanner, usando como parámetro un flujo de datos. Esto es posible gracias a que Scanner tiene un constructor que acepta objetos InputStream.   

System.out.println("Name:");

Imprime por la consola "Name:".

String input = scanner.next();

Bloquea la ejecución en espera de una entrada finalizada con un retorno. La función next(), retorna el string ingresado antes del retorno.

System.out.println("Hello " + input);

Imprime “Hello ”, seguido de lo que ingresamos por la consola

scanner.close();

Los objetos Scanner tiene un método close() para ser informados cuando ya no son necesarios. Normalmente los métodos close() son usados para liberar recursos mantenidos internamente por el objeto.

Podemos probar la clase, con botón derecho del ratón sobre la clase - Run As - Java Application. Hacer click en la consola para ganar el foco y poder escribir un nombre y retorno.