lunes, 29 de abril de 2013

Escritura de datos en archivos de texto.

Esn esta ocasión se intentara usando la clase Persona y la declaracion del arreglo de la entrada anterior intentar guardar estos datos en un archivo de texto de acceso secuencial. Para ello se introducirá dos nuevas clases:
  1. File (java.io.File)
  2. Formatter (java.util.Formatter)

La figura siguiente muestra el punto de partida del código que se va a desarrollar.
































Ahora introduciremos la clase File,esta clase brinda informacion sobre archivos y carpetas. El tipo de informacion que brinda por ejemplo es: si existe o no, si es un archivo o es una carpeta y si es una carpeta cual es su contenido. En una palabra podemos acceder no al contenido del archivo sino a la informacion asociada al archivo.
Utilizaremos la clase file para comprobar si el archivo donde vamos a guardar el contenido del arreglo existe previamente. En caso de que exista haremos que la aplicación pregunte si desea sobreescribirlo.
El código podría tener el siguiente aspecto.



















Se declararó una cadena conteniendo la ruta completa al archivo donde se desea guardar la información. Acto seguido se declaro e inicializó una instancia de la clase File a la que se le dió el nombre de archivoDestino. Observe que se pasa como argumento la cadena que contiene el nombre y la ruta al fichero, al momento de inicializar la instancia de la clase File.
Se verifica la existencia previa del archivo usando el método exists() de el objeto archivoDestino y en caso de que retorne true pues se le pregunta al usuario de la aplicación si desea sobreescribirlo.
La variable de tipo boolean que se llama luzVerde  tendrá valor true si y solo si el primer caracter leido desde el teclado es una 'n' mayúscula o minúscula. si tal es el caso la aplicación asume que no se desea escibir en el fichero por lo que el código que se escribirá a continuacion no se ejecutará.
Si luzVerde es true entonces significa que tenemos "luz verde" para destruir el contenido previo del archivo sustituyendolo por nuevo contenido. lo cual haremos de la siguiente forma:

Declararemos e instanciaremos un objeto de tipo java.util.Formatter. Estará asociado al objeto archivoDestino y utilizaremos el metodo format de este nuevo objeto para escribir en el archivo. Cuando se termina la operacion de escritura,cerramos el archivo.
El código podría ser el siguiente:



El código que escribe en el archivo debe estar dentro de una estructura try...catch. Pues la instanciación y posterior llamada al metodo format del objeto formatter es suceptible a lanzr errores en tiempo de ejecución. La sección catch en este caso solo saca por consola el mensaje asociada a la excepción que se pueda producir.
La llamada a format se parece a printf de System.out excepto que el cambio de línea se logra mediante el metacaracter '%n' en lugar de '\n'.

Al ejecutar este código se obtendria la siguiente salida:












Si cambiamos el valor del nombre del archivo a algo como esto:
String fqNombreArchivo = "C:\\Users\\william\\Desktop\\ternaArbitral.txt";

Ahora obtendríamos al ejecutar:
Lo cual es correcto. Si lo volvemos a ejecutar, entonces la salida sería:


Inspeccionando el contenido de archivo creado deberiamos estar viendo algo como esto.

A modo de conclusion podemos ver que la escritura de archivos de texto se puede llevar a cabo facilmente usando la clase java.util.Formatter, particularmente llamando a su metodo format. La verificación de existencia de archivos puede llevarse a cabo usando la clase File.
Le propongo mejore el codigo anterior verificando no solo que si el archivo de salida ya existe si no que use el metodo isFile() de la clase File para verificar que es un fichero en lugar de una carpeta.

En el proximo post se utilizará la clase Scanner para leer el archivo que se creó en esta sesión y lo convierta nuevamente en un arreglo de objetos de tipo Persona.

No hay comentarios:

Publicar un comentario