Las entrada y salida de datos en Java se basa en el concepto de “flujo” (stream). Un stream es un flujo de datos desde una fuente (input) o hacia un destino (output) y estos pueden llevar bytes o caracteres; los flujos pueden ser combinados/encadenados para realizar tareas como buffering, filtrado, etc. Las fuentes o destinos pueden ser archivos, conexiones de red, pantalla, teclado, arreglos, cadenas etc.
Para la manipulación de flujos de bytes están las clases e interfaces cuyos nombres terminan en “Stream” como FileInputStream o FileOutputStream; para la manipulación de flujos de caracteres están las clases e interfaces que terminan en “Reader” o “Writer” como FileReader o FileWriter
Manejo de excepciones
Cuando se realizan programas que requieran algún tipo de estrada o salida con el exterior es muy importante liberar los recursos cerrando todos los streams. Si la clase que se emplear para acceder al flujo implementa la interfaz AutoCloseable es recomendable emplear la sintaxis try-with resources presentada en el artículo sobre manejo de excepciones. En el siguiente vídeo se demuestra el uso básico de los flujos de datos.
Procesamiento de cadenas
El procesamiento de cadenas es sin duda una de las tareas recurrentes durante en desarrollo de software. Entre las librerías más empleadas para la manipulación de cadenas están: las clases String y Scanner (parte de la librería estándar de Java) y la clase StringUtils de la librería Commons Lang de la Apache Software Foundation. Para procesamiento de cadenas empleando expresiones regulares están las clases en el paquete java.util.regex de la librería estándar de Java