
En Java, la entrada y salida de datos (I/O) se refiere al proceso de leer información desde una fuente (entrada) y escribir información a un destino (salida). Esto permite a los programas interactuar con el mundo exterior, ya sea recibiendo información del usuario, leyendo archivos o enviando datos a otros sistemas.
Un aspecto clave es el uso de Streams. Un Stream representa un flujo de datos. Java proporciona dos tipos principales: InputStream y OutputStream para datos binarios, y Reader y Writer para datos basados en caracteres (texto). Cada tipo tiene sus propias clases especializadas para manejar diferentes fuentes y destinos, como archivos, la consola o la red.
La entrada de datos típicamente implica el uso de clases como Scanner o BufferedReader. Scanner facilita la lectura de datos formateados desde la entrada estándar (el teclado, por defecto). BufferedReader, a menudo combinado con InputStreamReader, permite la lectura eficiente de texto desde un Stream.
Must Read
La salida de datos generalmente se realiza a través de System.out.println() para escribir en la consola, o utilizando clases como PrintWriter o BufferedWriter para escribir en archivos o Streams. PrintWriter ofrece métodos convenientes para formatear la salida, mientras que BufferedWriter mejora la eficiencia al escribir grandes cantidades de datos.

Ejemplo 1 (Entrada):
import java.util.Scanner;
public class EjemploEntrada {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduce tu nombre:");
String nombre = scanner.nextLine();
System.out.println("Hola, " + nombre + "!");
scanner.close();
}
}
Ejemplo 2 (Salida):

import java.io.PrintWriter;
import java.io.IOException;
public class EjemploSalida {
public static void main(String[] args) {
try (PrintWriter writer = new PrintWriter("salida.txt")) {
writer.println("Este es un ejemplo de salida a un archivo.");
} catch (IOException e) {
System.err.println("Error al escribir en el archivo: " + e.getMessage());
}
}
}
Es fundamental el manejo de excepciones al trabajar con I/O, especialmente IOException, que puede ocurrir si hay problemas al acceder a archivos o Streams. El uso de bloques try-catch o la declaración throws es esencial para garantizar la robustez del programa.
En el mundo real, la entrada y salida de datos es crucial en casi todas las aplicaciones Java. Desde aplicaciones de consola simples que toman entrada del usuario, hasta sistemas empresariales complejos que leen y escriben datos en bases de datos y sistemas de archivos, la capacidad de manejar la información entrante y saliente es fundamental para la funcionalidad de la aplicación.