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 error

System.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 entrada
„

System.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 contenido
„

System.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." );
}
}