lunes, 29 de abril de 2013

Lectura desde archivos secuenciales.

En esta ocasión nos proponemos utilizar el archivo creado en el post anterior para escribir un código que abra el archivo y recupere todos los objetos tipo Persona ahi almacenados.
Para ello abrimos el proyecto que estamos desarrollando y en el mismo paquete persistencia crearemos una clase que servirá para tener un punto de partida limpio. Le asignaremos el nombre LeerArchivo y configuraremos nuestro proyecto para que utilice esta nueva clase como clase de inicio.
Para lograr esto último debemos declarar un metodo público estático y que no devuelva resultado alguno llamado main.
La ventana de Netbeans parecería algo así:

Ajustamos las propiedades del proyecto para que la clase de inicio sea LeerArchivo.

Como primer paso vamos a verificar la existencia de nuestro archivo. Para ello utilizamos la clase File. Ya la sección import contiene la mayoría de las clases que se utilizaran.
Una vez hecho esto, nuevo metodo main contendrá el esquema siguiente. Nada nuevo hasta aquí.

Ahora vamos a utilizar un objeto de la clase Scanner que asociaremos esta vez al archivo en lugar a como se acostumbra System.in. Y leeremos el contenido del archivo línea a línea.

La instanciación e inicializacion de el objeto Scanner deben tambien incluirse dentro de un bloque try...catch. La primera línea es recuperada en la cadena line.
Ahora bien, no queremos solo la primera linea, queremos todas las que existan en el archivo origen. Debemos leer dentro de un ciclo. Modificaremos el código de esta forma.

Ahora que estamos leyendo una tras otra las lineas de codigo lo que estamos obteniendo en la cadena line cada vez es una linea de texto que contiene el numero de cuenta, el nombre completo y el teléfono separados por un caracter de tabulación.
Necesitamos algo que separe las cadenas segun un separador determinado. Eso que necesitamos es una clase de java.util. Se llama StringTokenizer.
A continuación se muestra el código que la usa:

 Como vemos la inicialización de los objetos de tipo StringTokenizer requieren una cadena a dividir en partes y otra subcadena que contiene el delimitador. Acto seguido se van obteniendo esas partes (tokens) y se van asignando a un objeto de tipo Persona. Observe que el numero de cuenta se recupera como una cadena que contiene uno o varios caracteres numéricos y por lo tanto hay que interpretarlo como byte antes de asignarselo al miembro correspondiente del objeto Persona. Las clases de envoltura para los tipos primitivos contienen una familia de metodos Parse que realizan esta operación. En nuestro caso se usa la clase de envoltura Byte y el metodo ParseByte.

Ahora solo queda el escribir el código que mostrará por consola el contenido desde el objeto Persona. Podría ser algo así el estado final del código:

Al ejecutar este proyecto. (Se debe haber establecido esta nueva clase como clase de arranque) la salida que muestra es la siguiente.


Podemos abrir y editar con el bloc de notas, el archivo que estamos cargando e interpretando en términos de una secuencia de objetos de tipo Persona. Por ejemplo se podría añadir una nueva linea que contenga un 4 separado por tabulación de un nombre y separado por tabulacion de un numero de telefono ficticio. Nuestro proyecto debe ser capaz de volver a leer el archivo y esta vez recuperar las cuatro personas.

Los archivos de subtitulos SRT son archivos simples de texto en los cuales se especifican el texto a mostrar, marca de tiempo a partir de la cual mostrarla y marca de tiempo para ocultarla. Estas simples tecnicas de manejo de archivos de texto pueden ser usadas para por ejemplo añadir a cada subtiulo una demora en segundos u otras variaciones.

Hasta aqui la parte correspondiente a la lectura de archivos secuenciales.





1 comentario:

  1. La asignacion de la cadena nombreArchivo contiene un error. Demasiadas secuencias de escape y hasta un caracter ';'. El valor correcto debió ser simplemente:
    "C:\\Users\\william\\Desktop\\ternaArbitral.txt"

    ResponderEliminar