Introducción al tratamiento de ficheros en Java. E/S java.io.*
Paquete java.io
Todo dato tiene un origen de entrada o un destino de salida. Un programa trabaja con datos que provienen de una entrada la cual puede ser un teclado, un archivo en disco o un socket a través de la red. Como podemos comprender hay distintos orígenes de entrada y destinos de salida para los datos, en Java todos estos se consideran flujos de datos para los cuales disponemos, en la API estándar, del paquete java.io especializado en la tarea de poder controlar estos flujos con cierta abstracción sobre el origen de los mismos.
java.io.IOException
Es un tipo de excepción generalizada que es lanzada cuando algún tipo de operación I/O ah fallado. Esta excepción debe de ser tratada ya sea manejándola con un bloque de código try-catch en el mismo momento que se realice la operación o dejando que se propague hacia arriba en la pila de llamadas utilizando throws IOException.
E/S con flujos
En Java se define la abstracción de stream (flujo) para tratar la comunicación de información entre el programa y el exterior Entre una fuente y un destino fluye una secuencia de datos Los flujos actúan como interfaz con el dispositivo o clase asociada Operación independiente del tipo de datos y del dispositivo Mayor flexibilidad (p.e. redirección, combinación) Diversidad de dispositivos (fichero, pantalla, teclado, red, …) Diversidad de formas de comunicación
Flujos estandar
En Java se accede a la E/S estándar a través de campos estáticos de la clase java.lang.System
System.in implementa la entrada estándar System.out implementa la salida estándar System.err implementa la salida de errorSystem.in
Instancia de la clase InputStream: flujo de bytes de entrada
Metodos • read() permite leer un byte de la entrada como entero • skip(n ) ignora n bytes de la entrada • available() número de bytes disponibles para leer en la entradaSystem.out
Instancia de la clase PrintStream: flujo de bytes de salida
Metodos para impresión de datos • print(), println() • flush() vacía el buffer de salida escribiendo su contenidoSystem.err
Funcionamiento similar a System.out Se utiliza para enviar mensajes de error (por ejemplo a un fichero de log o a la consola)
import java.io.*; class LecturaDeLinea { public static void main( String args[] ) throws IOException { int c; int contador = 0; // se lee hasta encontrar el fin de línea while( (c = System.in.read() ) != '\n' ) { contador++; System.out.print( (char) c ); } System.out.println(); // Se escribe el fin de línea System.err.println( "Contados "+ contador +" bytes en total." ); } }