Madre de un conjunto de clases para leer ficheros
byte a byte.
La clase derivada más habitual es
java.io.FileInputStream |
|
FileInputStream(File file) |
constructor |
FileInputStream(String nombre) |
constructor |
Todas las clases derivadas de InputStream
proporcionan estos métodos:
java.io.InputStream |
|
int available() |
una estimación del número de bytes que
quedan por leer |
void close() |
cierra el fichero |
int
read() |
lee un byte devuelve el byte leído pasado a entero devuelve –1 si el fichero se ha acabado |
int
read(byte[] bytes) |
lee un número 'n' de bytes igual o menor
que la longitud del array 'bytes' devuelve el número de bytes leídos; devuelve –1 si el fichero se ha acabado |
int
read(byte[] bytes, int start, int n) |
lee un número 'n' de bytes devuelve el número de bytes leídos; devuelve –1 si el fichero se ha acabado |
Es habitual preparar un array de cierto tamaño,
pecando por exceso, para ir leyendo montones de bytes. En cada caso particular
habrá que decidir cómo se van leyendo bytes para hacer lo que haya que
hacerles. El ejemplo siguiente lee el fichero entero, devolviendo todos los
bytes en un array:
/** * Lectura de todos los bytes de un fichero. * * @param fichero nombre del fichero del que queremos leer. * @return todos los bytes en el fichero. * @throws IOException si hay problemas al abrir o al escribir. */
public byte[] leeTodosLosBytes(String fichero) throws IOException { File file = new File(fichero); int longitud = (int) file.length(); InputStream is = new FileInputStream(fichero); byte[] total = new byte[longitud]; int leidos = 0; while (leidos < longitud) { int n = is.read(total,
leidos, 1000); if (n < 0) break; leidos += n; } is.close(); return total; } |
Java proporciona una clase derivada, BufferedInputStream,
que proporciona la misma funcionalidad, pero realiza una gestión más eficiente del
fichero, leyendo muchos bytes de golpe para que las llamadas a los métodos
'read()' sean más rápidas.
El ejemplo anterior probablemente funcione más
deprisa escrito de la siguiente forma:
public byte[]
leeTodosLosBytes(String fichero) throws IOException { File file = new File(fichero); int longitud = (int) file.length(); InputStream is = new BufferedInputStream( new
FileInputStream(fichero)); byte[] total = new byte[longitud]; int leidos = 0; while (leidos < longitud) { int n = is.read(total, leidos,
1000); if (n < 0) break; leidos += n; } is.close(); return total;
} |
InputStream lee bytes (8 bits). Si necesita leer
caracteres (16 bits), debe utilizar la clase Reader.
Ver “File, “Reader, “OutputStream.
Temas relacionados