Cómo leer de un archivo local en Java

Cómo leer de un archivo local en Java
Un archivo local está en el disco duro o en una unidad flash conectada al puerto USB. Los archivos se pueden clasificar en dos categorías: archivos de texto y archivos de byte. Los archivos de texto típicos son archivos creados por un editor de texto. El archivo de imagen es un ejemplo de un archivo de byte que consiste principalmente en bytes sin procesar.

Este artículo ofrece una explicación básica de cómo leer archivos de texto y byte locales en Java. Para leer un archivo de texto, use la clase, FileReader. Para leer un archivo de byte, use la clase, FileInputStream. Ambas clases están en el Java.IO.* Paquete, que debe importarse. La primera mitad de este artículo trata con la lectura de archivos de texto, y la segunda mitad trata con la lectura de archivos de byte.

Lectura de archivos de texto

Construyendo un objeto FileReader

Antes de aprender a construir un objeto FileReader, cree el siguiente archivo de texto, con un editor de texto y presione la tecla ENTER al final de las dos primeras líneas:

Un texto 1 un texto 1 un texto 1 un texto 1 un texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

Si no se presiona la tecla ENTER al final de la última línea, el editor de texto puede agregar una nueva línea cuando se guarda el archivo. Después de producir el texto anterior, guarde el contenido, con el nombre TEMP.txt, usando el menú Editor de texto, usuario@host: ~/dir1 $, en el directorio. Esto significa que el directorio, Dir1, debería haberse creado.

Construyendo un lector de archivos

La clase de FileReader tiene cinco constructores. Solo uno se ilustra en este artículo (para mantener el artículo corto). La sintaxis para el constructor es:

Public FileReader (String FileName) lanza FileNotFoundException

Esto se crea en la memoria una secuencia (copia) del archivo, cuya ruta y nombre es la cadena, nombre de archivo. Lanza un FileNotFoundException si el archivo no se encuentra en el directorio indicado. Después de copiar el contenido del archivo, el objeto de archivo abierto debe cerrarse para liberar los recursos del sistema asociados con el archivo abierto.

Métodos importantes de FileReader

Si el constructor se crea correctamente, entonces el archivo se considera abierto. Después de usar el archivo, el archivo debe cerrarse. La sintaxis para cerrar un archivo es:

Public void Close () lanza ioexception

Una vez que se acaba de abrir el archivo, la lectura efectiva del archivo aún no ha ocurrido. Para leer un personaje a la vez (uno luego el siguiente), emplee la sintaxis del método FileReader:

public int read () lanza ioexception

Esto devuelve el carácter (como entero) lectura o -1 si se ha alcanzado el final de la secuencia (flujo de copias de archivo en la memoria).

Para leer la siguiente secuencia de caracteres del archivo, en una matriz, emplee la sintaxis del método FileReader:

Public int Read (char [] cbuf, int off, int Len) lanza ioexception

Devuelve el número de caracteres que leen o -1 si se alcanzó el final de la transmisión. Apagado en la sintaxis significa desplazamiento. Es el índice en el archivo donde la lectura de la siguiente secuencia de caracteres. Len es el número de caracteres para leer. Debe ser la longitud de la matriz, mientras que CBUF es la matriz en la que se leen la secuencia de caracteres.

Recuerde que el objeto FileReader debe cerrarse con su método cerrado después de esta lectura efectiva.

La sintaxis del método, para saber si la próxima lectura no volverá -1, es:

Public Boolean Ready () lanza ioexception

Devuelve verdadero si hay algo que leer y falso de lo contrario.

Leyendo en una cuerda

El siguiente código, lee el archivo anterior, carácter por carácter, en una cadena StringBuilder:

StringBuilder sb = new StringBuilder ();
intentar
Filereaderfr = new FileReader ("Dir1/Temp.TXT");
mientras (fr.listo())
char ch = (char) fr.leer();
SB.anexar (CH);


Catch (excepción e)
mi.getMessage ();

Sistema.afuera.println (SB);

El código comienza con la instanciación de un objeto StringBuilder, SB. Luego, está la construcción de captura de try. El bloque de intentos comienza con la instancia del FileReader, FR. Y está el bucle while, que itera hasta que está listo () devuelve falso. La primera declaración en While-Loop lee y devuelve el siguiente personaje como entero. Tiene que ser elegido para char. La siguiente declaración en When-loop agrega el siguiente carácter a la cadena, SB. La salida es:

Un texto 1 un texto 1 un texto 1 un texto 1 un texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

Es exactamente el contenido del archivo, pero agregó una línea adicional en la computadora del autor.

Leyendo en una matriz

Al leer una matriz, el contenido de la matriz debe ser lanzado, para que se lean la próxima secuencia de personajes. El siguiente código ilustra esto:

StringBuilder sb = new StringBuilder ();
intentar
Filereaderfr = new FileReader ("Dir1/Temp.TXT");
mientras (fr.listo())
char [] arr = new Char [5];
int offset = 0;
fría.leer (arr, offset, 5);
offset = offset + 5;
Sistema.afuera.imprimir (arr);


Catch (excepción e)
mi.getMessage ();

Sistema.afuera.println ();

El valor del desplazamiento debe ser incrementado para cada iteración por la longitud de la matriz. La salida es:

Un texto 1 un texto 1 un texto 1 un texto 1 un texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

Es exactamente como el contenido del archivo, pero agregó una línea extra, en la computadora del autor.

Lectura de archivos de byte

Construyendo un objeto FileInputStream

El siguiente archivo de imagen se llama barras.png. Está en el directorio user@host: ~/dir1 $, que es el mismo directorio que temperatura.TXT. Consiste en solo tres barras de color:

Construyendo un FileInputStream

Un constructor para un objeto FileInputStream es:

Public FileInputStream (nombre de cadena) lanza FileNotFoundException

Dado que lanza una excepción, debería estar en una construcción de captura de try. Recuerda que esta clase es para leer bytes.

Métodos importantes de FileInputStream

Si el constructor se crea correctamente, entonces el archivo se considera abierto. Después de leer los bytes, el archivo debe cerrarse, empleando la siguiente sintaxis:

Public void Close () lanza ioexception

Una vez que se acaba de abrir el archivo, la lectura efectiva del archivo aún no ha ocurrido. Para leer un byte a la vez (uno luego el siguiente), emplee la sintaxis del método FileInputStream:

public int read () lanza ioexception

Esto devuelve el byte (como entero) leído, o -1 si se ha alcanzado el final de la secuencia (flujo de copias de archivo en la memoria).

Recuerde que después de esta lectura efectiva, el objeto FileInputStream debe estar cerrado, con su método cerrado.

Para tener una estimación del número de bytes que quedan por leer, emplee la sintaxis del método:

Public int disponible () lanza ioexception

Dado que este método devuelve una estimación, cuando se usa junto con Read (), no se puede estar seguro de que se hayan leído todos los bytes del archivo. Y se debe preferir el siguiente método que lea todos los bytes:

byte público [] readallbytes () lanza ioexception

Este método devuelve todos los bytes restantes, pero aún así leería el archivo completo.

Leyendo en una lista de matrices

La ArrayList debe importarse de la Java.utilizar.* paquete. El siguiente código lee una estimación de todos los bytes en un objeto ArrayList:

ArrayList al = new ArrayList ();
intentar
FileInputStream Fir = new FileInputStream ("Dir1/Bars.png ");
Mientras (Fir.disponible ()> 0)
byte bt = (byte) fir.leer();
Alabama.agregar (bt);


Catch (excepción e)
mi.getMessage ();

Sistema.afuera.println (Al);

El código comienza con la instanciación de un objeto ArrayList, Al. Luego, está la construcción de captura de try. El bloque de try comienza con la instanciación de FileInputStream, FIR. Y está el bucle while, que itera hasta que esté disponible () y sugiere que no se deja que no se lean byte. La primera declaración en While-Loop lee y devuelve el siguiente byte como entero. Tiene que ser lanzado a un byte. La siguiente declaración en While-Loop Agrega (agrega) el siguiente carácter a la lista, Al. La salida es:

[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, - - - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 0, 0, 0, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - - - 26, -70, 44, -41, 5, 104, 58, -99 - - - y continúa - - -]

Los bytes son enteros. Con suerte, la imagen de las tres barras anteriores consiste en todos estos bytes. La idea es que el programador cambie algunos de los bytes, modifique la imagen y luego guarde el resultado; Luego vuelva a mostrarlo con el visor de imágenes mientras presenta una imagen modificada. Sin embargo, este horario adicional no se aborda en este artículo.

Leyendo en una matriz

El método ReadallBytes () devuelve una matriz de bytes. Entonces, solo reciba los valores de retorno, con una matriz de bytes, como muestra el siguiente código:

byte [] arr = new Byte [1000];
intentar
FileInputStream Fir = new FileInputStream ("Dir1/Bars.png ");
arr = Fir.readallBytes ();

Catch (excepción e)
mi.getMessage ();

para (int i = 0; iSistema.afuera.imprimir (arr [i] + ",");
Sistema.afuera.println ();

El código comienza con la declaración de la matriz que recibirá los bytes. El tamaño (longitud) aquí debe estar por encima del tamaño estimado. El tamaño estimado se puede obtener con el método disponible (). El código principal está en el bloque de try. La salida es:

-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - - - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - - y continúa - - -

Esta salida y la anterior son las mismas en la computadora del autor.

Conclusión

Se pueden leer archivos de texto y byte locales. Para leer un archivo de texto, use la clase de transmisión, FileReader. Para leer un archivo de byte, use la clase de transmisión, fileInputStream. Ambas clases están en el Java.IO.* Paquete, que debe importarse. Estas dos clases tienen constructores y métodos que permiten la lectura. Esperamos que haya encontrado útil el artículo. Echa un vistazo a otros artículos de Sugerencia de Linux para obtener más consejos y tutoriales.