Igor Santos Grueiro. Ahora tenemos datos y datos …

Preview:

Citation preview

Programación IIFicheros

Igor Santos Grueiro

Ahora tenemos datos y datos …

… pero ¿dónde están esos datos?

Aquí NO están…

… aquí

tampoco están esos datos…

… entonces, ¿dónde están?

Están aquí

Y si alguien pulsa…

… nos podemos pegar un tiro…

… o utilizar

los ficheros

Un fichero es un conjunto de datos homogéneos almacenados en un

soporte externo permanente.

Ficheros de

Registros

Ficheros de Texto

Ficheros de

Objetos

Según su contenido pueden clasificarse en

Según su método de accesopueden clasificarse en

Ficheros secuenciales

Ficheros de

acceso directo

Ficheros de

acceso indexado

De salida

Según la relación con el programa pueden clasificarse en

De entradaDe entrada

y salida

Y, ¿cómo se manejan los ficheros en Java?

Hay que importar la biblioteca de manejo de entrada y salida

import java.io.*;

Se añade en la cabecera

Si vamos a meter objetos en el fichero…

… el tipo (o clase) del objeto tiene

ser “Serializable”

Y, ¿eso cómo se hace?

public class NombreDeLaClase implements Serializable

Los métodos que utilicen ficheros pueden

lanzar excepciones

añadiremos

throws Exceptiona estos métodos

public static void main(String [] args) throws Exception

¿Cómo se utilizan los ficheros de salida?

Crear un objeto de la clase FileOutputStream asociado al nombre

del fichero físico1

FileOutputStream NombreObjetoFicheroFisico = new FileOutputStream(“NombreDelFichero.DAT”);

Crear un objeto de la clase ObjectOutputStream

asociado al objeto anterior, es decir al fichero físico 2

ObjectOutputStream NombreObjetoFicheroLogico = new

ObjectOutputStream(NombreObjetoFicheroFisico);

Para escribir en el fichero los objetos de una clase

concreta deberemos utilizar writeObject3

NombreObjetoFicheroLogico.writeObject(VariableObjeto);

Se puede grabar un objeto null como

marca de fin de fichero4

NombreObjetoFicheroLogico.writeObject(null);

Se cierra el fichero lógico5

NombreObjetoFicheroLogico.close();

¿Cómo se utilizan los ficheros de entrada?

Crear un objeto de la clase FileInputStream

asociado al nombre del fichero físico1

FileInputStream NombreObjetoFicheroFisico = new FileInputStream(“NombreDelFichero.DAT”);

Crear un objeto de la clase ObjectInputStream

asociado al objeto anterior, es decir al fichero físico 2

ObjectInputStream NombreObjetoFicheroLogico = new ObjectInputStream(NombreObjetoFicheroFisico);

Para leer los objetos que estén en el fichero

los objetos de una clase concreta deberemos utilizar readObject3

Pero ¡cuidado!, devuelve un objeto de la clase object

Es necesario un casting

Tipo t = (Tipo) ObjetoGenérico ;

ClaseDelObjeto VariableObjeto = (ClaseDelObjeto)NombreObjetoFicheroLogico.readObject();

Se realiza la lectura hasta

encontrar el objeto null

while (VariableObjeto != null)

Al finalizar se cierra el fichero lógico 4

NombreObjetoFicheroLogico.close();

Ya somos capaces de guardar nuestros datos

para mantenerlos

a salvo

Y como siempre: ¡A PRACTICAR!

Vamos a crear una biblioteca

Lo primero, creamos libros

Implementar una clase entidad "Libro" que represente los libros de la biblioteca. Deberá tener 4 atributos privados que serán el código ISBN del libro (de tipo String), el título (de tipo String), el autor del libro (de tipo double) y si está o no prestado (de tipo booleano). Como métodos públicos se deberán definir:1. Los dos constructores: por defecto y recibiendo los

datos de los atributos.2. Los consultores (get) y modificadores (set) para

cada atributo.3. mostrar, para visualizar los datos del libro.

Lo segundo, llenamos la biblioteca

Haciendo uso de la clase "Libro", diseñar un programa para introducir desde el teclado los datos correspondientes a los libros que hay en la biblioteca y guardarlos en un fichero cuyos componentes son de la clase Libro.

En tercer lugar, mostramos la biblioteca

Haciendo uso de la clase "Libro", diseñar un programa para visualizar todos los libros que hay en la biblioteca y que están contenidos en el fichero “LIBROS.DAT”.

Seguidamente, buscamos libros

Haciendo uso de la clase "Libro", diseñar un programa para visualizar todos los libros que hay en la biblioteca y que pertenecen a un determinado autor, el cual ha sido seleccionado previamente introduciendo su nombre desde el teclado. Si el autor no tiene ningún libro en la biblioteca se emitirá un mensaje de esta situación al usuario del programa.

Por último, hacemos TODO

Diseñar un programa que nos permita cargar el contenido del fichero en una estructura en memoria cuyos componentes son del mismo tipo que los del fichero de libros, y que una vez realizada esta carga en el array el programa mostrará en pantalla el siguiente menú: 1. Introducir un nuevo libro2. Borrar un libro3. Modificar un libro 4. Listado de los libros que existen de un autor5. Relación de los libros prestados6. FinalizarUna vez que ha sido visualizado el menú el usuario selecciona una de las seis opciones y el programa la ejecuta a continuación pudiendo repetirse este proceso hasta que la opción seleccionada sea la de Finalizar lo que le llevará a realizar al programa un volcado de la estructura en memoria sobre un fichero nuevo que contenga toda la actualización de los libros de la biblioteca

Introducir un nuevo libro

Este método inserta o añade en la primera posición libre de la estructura en memoria un nuevo libro. Si ya existen 1000 libros, no se puede añadir ninguno más a dicha estructura. Todos los datos del libro se piden por teclado con el mismo formato que se utilizo para crear el fichero inicialmente.

Borrar un libro

Este método suprime de la estructura en memoria el libro cuyo código ISBN ha sido introducido por el usuario a través del teclado. En caso de que no exista dicho código se muestra un mensaje de error, y si existe en la estructura antes de borrarlo se comprueba que no esté prestado en cuyo caso se aborta la acción avisando de este hecho al usuario. En caso de que no este prestado el libro se visualizarán todos los datos del libro y se confirmará por parte del usuario si está seguro de desear borrarlo. Si la respuesta es afirmativa, se suprime el libro de la estructura, en caso contrario no se realiza ninguna acción sobre ella. Para suprimir el libro hay que desplazar todos los libros que estén a su derecha una posición a la izquierda en dicha estructura .

Modificar un libro

Este método permite modificar el código ISBN, el autor, el título o la situación del préstamo de un libro contenido en la estructura. El método preguntará al usuario cuál es el dato que desea modificar y le pedirá que introduzca por el teclado el nuevo valor que desea asignar a dichos datos.

Listado de los libros que existen de un autor

Este método permite visualizar los atributos código ISBN y Título de cada uno de los libros contenidos en la biblioteca y que han sido escritos por un autor concreto, el cual es seleccionado por el usuario a través del teclado.

Relación de los libros prestados

Este método permite mostrar en pantalla la relación de todos los libros de la biblioteca cuya condición es de estar prestados en ese momento.

El programa main tiene esta pinta

public static void main(String[] args) throws Exception {Libro [] aLibros= new Libro[1000];cargarLibros(aLibros);int opc;do{

opc = menu();switch (opc){ case 1: nuevoLibro(aLibros); break; case 2: borrarLibro(aLibros); break; case 3: modificarLibro(aLibros); break; case 4: librosAutor(aLibros); break; case 5: librosPrestados(aLibros); break;}

}while (opc != 6);volcarLibros(aLibros);

}

Cuando se finaliza con la opción 6

Una vez que el usuario selecciona la opción 6 para finalizar el programa, esté entonces ejecutará el siguiente método:

Volcar la estructura en el fichero Se trata de volcar o salvar los componentes de la estructura en un nuevo fichero de libros actualizado (“LibrosAct.dat”) .

¡A programar !

Programación IIFicheros

Igor Santos Grueiro