Introducción al taller

En este taller voy a presentaros la API de Java IO, para que si estáis aprendiendo Java podáis comprender mejor cómo se utilizan los InputStream, OutputStream y demás perlas que tiene el paquete java.io. En este capítulo te doy la bienvenida al taller y te cuento cómo voy a estructurar este proyecto.

Java es uno de esos lenguajes de programación que se ha ganado un lugar especial en la enseñanza, tanto en la escuela como en la universidad. Su popularidad no es casualidad: es un lenguaje ubicuo que funciona en prácticamente cualquier entorno y, además, nos introduce de manera clara en los principios de la programación orientada a objetos. Esto hace que aprender Java sea una inversión valiosa para cualquier carrera profesional en desarrollo de software.

Cuando empezamos a aprender Java, la curva inicial suele ser bastante accesible, especialmente si no es nuestro primer lenguaje. Sin embargo, llega un momento en el aprendizaje en que nos enfrentamos a conceptos que pueden resultar más complejos, como la gestión de entrada y salida (I/O). Aquí es donde entran en juego los streams, esos canales que nos permiten leer y escribir datos, ya sea desde la consola, archivos o cualquier otro medio.

En este contexto, es fundamental entender qué son y cómo funcionan los input streams y output streams. Los input streams nos permiten leer datos desde una fuente, mientras que los output streams nos facilitan la escritura de datos hacia un destino. Java también nos ofrece abstracciones más específicas para trabajar con caracteres, que son los readers y writers. Estos últimos son especialmente útiles cuando manejamos texto, ya que trabajan con codificaciones y caracteres de manera más adecuada que los streams básicos, que operan a nivel de bytes.

Un punto importante que debemos tener en cuenta es que este enfoque sobre streams no debe confundirse con la API de streams introducida en Java 8, que está orientada a procesamiento funcional de colecciones y no a la gestión de entrada y salida tradicional. Aquí nos centramos exclusivamente en la I/O clásica, que es la base para manejar datos en programas Java.

Para comenzar a trabajar con entrada y salida estándar en Java, podemos utilizar System.in para la entrada y System.out para la salida. Estos objetos representan los streams estándar que nos permiten interactuar con el usuario a través de la consola. Por ejemplo, para leer datos desde la entrada estándar, podemos envolver System.in en un InputStreamReader y luego en un BufferedReader para facilitar la lectura de líneas completas de texto:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class EntradaSalida {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            System.out.println("Introduce una línea de texto:");
            String linea = reader.readLine();
            System.out.println("Has escrito: " + linea);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

En este ejemplo, InputStreamReader convierte los bytes que llegan por System.in en caracteres, y BufferedReader nos permite leer líneas completas de texto de forma eficiente. Para la salida, simplemente usamos System.out.println para mostrar información en la consola.

Cuando trabajamos con archivos, el concepto es similar, pero en lugar de usar los streams estándar, abrimos streams específicos para archivos. Por ejemplo, para escribir en un archivo podemos usar un FileOutputStream o un FileWriter, dependiendo de si queremos trabajar con bytes o caracteres.

Entender estas diferencias y saber cuándo usar cada tipo de stream o reader/writer es clave para manejar correctamente la entrada y salida en Java. Así, podemos construir programas que interactúen con el usuario, lean y escriban archivos, y en general gestionen datos de manera eficiente y segura.

Este conocimiento es fundamental para avanzar en el desarrollo profesional con Java, ya que la gestión de streams es una habilidad que se utiliza en multitud de aplicaciones, desde programas sencillos hasta sistemas complejos que requieren manipulación avanzada de datos.

Lista de reproducción
  1. 1
    Introducción al taller
    2 minutos
  2. 2
    Qué es la entrada y salida
    4 minutos
  3. 3
    Streams de entrada y salida en Java
    7 minutos
  4. 4
    FileOutputStream
    9 minutos
  5. 5
    FileInputStream
    13 minutos
  6. 6
    try-with-resources
    2 minutos
  7. 7
    ObjectOutputStream y OutputInputStream
    6 minutos
  8. 8
    Object streams con Strings y Objects
    6 minutos
  9. 9
    Serializando clases
    7 minutos
  10. 10
    Los peligros de Serializable
    4 minutos
  11. 11
    BufferedOutputStream
    6 minutos
  12. 12
    Envolviendo varios OutputStreams
    2 minutos
  13. 13
    BufferedInputStream y rebobinado de streams
    9 minutos
  14. 14
    Readers y Writers en Java
    3 minutos
  15. 15
    Writer y FileWriter
    4 minutos
  16. 16
    Reader, FileReader y BufferedReader
    4 minutos
  17. 17
    InputStreamReader y OutputStreamWriter
    6 minutos
  18. 18
    PrintStream y PrintWriter
    5 minutos