Objetivo |
Aprender a guardar y leer información de archivos de texto | |
Producto a Entregar |
Un archivo comprimido con el programa generado en la actividad y un archivo de texto con las preguntas contestadas. | |
Forma de Trabajo |
Equipos | |
Tiempo estimado |
3 horas | |
Forma de Entrega |
Por Blackboard | |
Recomendaciones |
|
Instrucciones |
|
|---|---|
Paso 1:Este laboratorio va a ocupar las dos sesiones de esta semana, por lo que es importante que guardes tu archivo para poder continuar trabajando con él en la próxima sesión. Además del laboratorio debes entregar un archivo de texto con las preguntas que aparecen en negritas a lo largo del laboratorio contestadas. Descarga el esqueleto de la aplicación. Abre el proyecto en NetBeans, compílalo y córrelo para verificar que todo funcione correctametne. Deberá aparecer una pantalla similar a la siguiente:
Paso 2:Haz click derecho sobre el botón leer archivo y selecciona el evento action performed. Para que este evento funcione de manera correcta debemos mostrar un cuadro de dialogo que le permita al usuario seleccionas un archivo. Este cuadro de dialogo está incluido en la clase JFileChooser, que muestra una pantalla similar a la que usa el sistema operativo para seleccionar archivos.
Como puedes ver, el método showOpenDialog() recibe un componente de la misma manera que lo hacía el método showMessageDialog() de JOptionPane, esto para que sepa qué ventana es su padre.
Una vez que obtenemos el archivo podemos abrirlo utilizando un BufferedReader:
Como la lectura de archivos puede tener errores (porque el archivo no existe, porque no tenemos privilegios de lectura, porque el disco no sirve) debemos manejar las excepciones. Para hacer esto debemos utilizar un try.
Hay muchas maneras de leer todo un archivo, dependiendo de qué queremos hacer con él. En este caso queremos desplegar todo el texto en una caja de texto por lo que debemos guardar todo el texto del archivo en una variable y mostrar la variable en la caja de texto.
Prueba tu programa para verificar que funciona correctamente. Nota: La manera que estamos utilizando para leer archivos no es muy eficiente, por lo que abrir un archivo muy grande (de algunos millones de líneas) va a hacer que se congele tu aplicación. Paso 3:Ahora selecciona el botón de guardar archivo, lo primero que debemos hacer en este botón es mostrar un diálogo que pregunte al usuario dónde quiere guardar su archivo, esto podemos lograrlo utilizando el JFileChooser de manera similar a cuando lo hicimos al leer.
Una vez que tenemos el archivo que seleccionó el usuario podemos utilizarlo para construir un PrintWriter con el que vamos a escribir el texto de la caja de texto a un archivo. Esto lo hacemos de la siguiente manera:
De la misma manera que el BufferedReader debemos agregar un try al utilizar el PrintWriter para leer archivos. En este caso es importante fijarse que no debemos manejar las dos excepciones como la vez anterior, sino únicamente IOException porque al escribir un archivo si el archivo no existe se crea automaticamente.
Después de esto debemos obtener el texto de la caja de texto y guardarlo en el archivo. Recuerda que es muy importante que una vez que hemos terminado de escribir en un archivo debemos cerrarlo porque si no se van a perder los datos.
Paso 4:Utilizando la presentación de autoestudio, los ejercicios anteriores y tus conocimientos previos completa la funcionalidad de todos los demás botones de la parte superior. Una observación que te puede ayudar es que todos los botones muestran un diálogo de abrir archivo o guardar archivo, por lo que podrías ahorrarte algo de código si haces un método que muestre el diálogo y te devuelva el archivo que seleccionó el usuario.
Paso 5:Ahora abre la clase Person en la ventana del explorador de proyectos. Al final de la clase persona encontrarás el método toSaveString() que va a poner los datos de la persona y separarlos con gatos (#) lo que nos va a permitir guardarlos a un archivo de texto. Dentro de este método vamos a utilizar el método String.format() para crear un String que tenga el formato que queremos. El método String.format() funciona de la misma manera que el método printf() que vimos en la presentación pero en lugar de imprimir al archivo con formato nos devuelve un String con el formato que pusimos. Sabiendo esto podemos crear el método de la siguiente manera:
Ahora regresa a la clase MainFrame y ve al código del botón de guardar persona. Dentro del código del botón lee los datos de las cajas de texto, crea un objeto de tipo persona, después muestra un dialogo de guardar archivo y utiliza el método toSaveString() para guardar a la persona en este archivo. Recuerda que es muy importante que cierres el archivo después de guardar el texto porque si no vas a perder los datos. Paso 6:Ahora ve al código de leer persona. Para leer los datos de la persona vamos a utilizar la clase Scanner que nos proporciona varios métodos que nos permiten leer archivos de texto que tienen formato. Para crear el Scanner vamos a utilizar el siguiente constructor:
Una vez que hemos creado el Scanner debemos decirle cómo está separado nuestro archivo. Al construir el Scanner por default trae como separadores los espacios y los cambios de línea (que era como lo habíamos estado utilizando) pero ahora vamos a utilizar un método muy poderoso que nos permite indicarle al Scanner cuándo debe dejar de leer.
Ahora que le hemos dicho al Scanner cómo esta dividido nuestro archivo debemos leer los datos del archivo en el mismo orden que los guardamos, como podrás recordar la clase Scanner tiene método para leer texto, numeros y decimales por lo que podemos utilizar todo su poder.
Ahora que hemos leido todo el texto debemos crear el objeto persona y mostrarlo en las cajas de texto correspondientes.
Verifica que tu programa funcione correctamente y que todos los botones trabajen de acuerdo a lo esperado. Comprime tu carpeta de trabajo y mándala por Blackboard junto con el archivo de texto en el que respondiste las preguntas. |
|