70
Programación II Ficheros Igor Santos Grueiro

Igor Santos Grueiro. Ahora tenemos datos y datos …

Embed Size (px)

Citation preview

Page 1: Igor Santos Grueiro. Ahora tenemos datos y datos …

Programación IIFicheros

Igor Santos Grueiro

Page 2: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ahora tenemos datos y datos …

Page 3: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 4: Igor Santos Grueiro. Ahora tenemos datos y datos …

Aquí NO están…

Page 5: Igor Santos Grueiro. Ahora tenemos datos y datos …

… aquí

tampoco están esos datos…

Page 6: Igor Santos Grueiro. Ahora tenemos datos y datos …

… entonces, ¿dónde están?

Page 7: Igor Santos Grueiro. Ahora tenemos datos y datos …

Están aquí

Page 8: Igor Santos Grueiro. Ahora tenemos datos y datos …

Y si alguien pulsa…

Page 9: Igor Santos Grueiro. Ahora tenemos datos y datos …

… nos podemos pegar un tiro…

Page 10: Igor Santos Grueiro. Ahora tenemos datos y datos …

… o utilizar

los ficheros

Page 11: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

soporte externo permanente.

Page 12: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ficheros de

Registros

Ficheros de Texto

Ficheros de

Objetos

Según su contenido pueden clasificarse en

Page 13: Igor Santos Grueiro. Ahora tenemos datos y datos …

Según su método de accesopueden clasificarse en

Page 14: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ficheros secuenciales

Page 15: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ficheros de

acceso directo

Page 16: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ficheros de

acceso indexado

Page 17: Igor Santos Grueiro. Ahora tenemos datos y datos …

De salida

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

De entradaDe entrada

y salida

Page 18: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 19: Igor Santos Grueiro. Ahora tenemos datos y datos …

Hay que importar la biblioteca de manejo de entrada y salida

Page 20: Igor Santos Grueiro. Ahora tenemos datos y datos …

import java.io.*;

Se añade en la cabecera

Page 21: Igor Santos Grueiro. Ahora tenemos datos y datos …

Si vamos a meter objetos en el fichero…

Page 22: Igor Santos Grueiro. Ahora tenemos datos y datos …

… el tipo (o clase) del objeto tiene

ser “Serializable”

Page 23: Igor Santos Grueiro. Ahora tenemos datos y datos …

Y, ¿eso cómo se hace?

Page 24: Igor Santos Grueiro. Ahora tenemos datos y datos …

public class NombreDeLaClase implements Serializable

Page 25: Igor Santos Grueiro. Ahora tenemos datos y datos …

Los métodos que utilicen ficheros pueden

lanzar excepciones

Page 26: Igor Santos Grueiro. Ahora tenemos datos y datos …

añadiremos

throws Exceptiona estos métodos

Page 27: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 28: Igor Santos Grueiro. Ahora tenemos datos y datos …

¿Cómo se utilizan los ficheros de salida?

Page 29: Igor Santos Grueiro. Ahora tenemos datos y datos …

Crear un objeto de la clase FileOutputStream asociado al nombre

del fichero físico1

Page 30: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 31: Igor Santos Grueiro. Ahora tenemos datos y datos …

Crear un objeto de la clase ObjectOutputStream

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

Page 32: Igor Santos Grueiro. Ahora tenemos datos y datos …

ObjectOutputStream NombreObjetoFicheroLogico = new

ObjectOutputStream(NombreObjetoFicheroFisico);

Page 33: Igor Santos Grueiro. Ahora tenemos datos y datos …

Para escribir en el fichero los objetos de una clase

concreta deberemos utilizar writeObject3

Page 34: Igor Santos Grueiro. Ahora tenemos datos y datos …

NombreObjetoFicheroLogico.writeObject(VariableObjeto);

Page 35: Igor Santos Grueiro. Ahora tenemos datos y datos …

Se puede grabar un objeto null como

marca de fin de fichero4

Page 36: Igor Santos Grueiro. Ahora tenemos datos y datos …

NombreObjetoFicheroLogico.writeObject(null);

Page 37: Igor Santos Grueiro. Ahora tenemos datos y datos …

Se cierra el fichero lógico5

Page 38: Igor Santos Grueiro. Ahora tenemos datos y datos …

NombreObjetoFicheroLogico.close();

Page 39: Igor Santos Grueiro. Ahora tenemos datos y datos …

¿Cómo se utilizan los ficheros de entrada?

Page 40: Igor Santos Grueiro. Ahora tenemos datos y datos …

Crear un objeto de la clase FileInputStream

asociado al nombre del fichero físico1

Page 41: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 42: Igor Santos Grueiro. Ahora tenemos datos y datos …

Crear un objeto de la clase ObjectInputStream

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

Page 43: Igor Santos Grueiro. Ahora tenemos datos y datos …

ObjectInputStream NombreObjetoFicheroLogico = new ObjectInputStream(NombreObjetoFicheroFisico);

Page 44: Igor Santos Grueiro. Ahora tenemos datos y datos …

Para leer los objetos que estén en el fichero

los objetos de una clase concreta deberemos utilizar readObject3

Page 45: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 46: Igor Santos Grueiro. Ahora tenemos datos y datos …

Es necesario un casting

Page 47: Igor Santos Grueiro. Ahora tenemos datos y datos …

Tipo t = (Tipo) ObjetoGenérico ;

Page 48: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 49: Igor Santos Grueiro. Ahora tenemos datos y datos …

Se realiza la lectura hasta

encontrar el objeto null

Page 50: Igor Santos Grueiro. Ahora tenemos datos y datos …

while (VariableObjeto != null)

Page 51: Igor Santos Grueiro. Ahora tenemos datos y datos …

Al finalizar se cierra el fichero lógico 4

Page 52: Igor Santos Grueiro. Ahora tenemos datos y datos …

NombreObjetoFicheroLogico.close();

Page 53: Igor Santos Grueiro. Ahora tenemos datos y datos …

Ya somos capaces de guardar nuestros datos

Page 54: Igor Santos Grueiro. Ahora tenemos datos y datos …

para mantenerlos

a salvo

Page 55: Igor Santos Grueiro. Ahora tenemos datos y datos …

Y como siempre: ¡A PRACTICAR!

Page 56: Igor Santos Grueiro. Ahora tenemos datos y datos …

Vamos a crear una biblioteca

Page 57: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 58: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 59: Igor Santos Grueiro. Ahora tenemos datos y datos …

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”.

Page 60: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 61: Igor Santos Grueiro. Ahora tenemos datos y datos …

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

Page 62: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 63: Igor Santos Grueiro. Ahora tenemos datos y datos …

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 .

Page 64: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 65: Igor Santos Grueiro. Ahora tenemos datos y 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.

Page 66: Igor Santos Grueiro. Ahora tenemos datos y datos …

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.

Page 67: Igor Santos Grueiro. Ahora tenemos datos y datos …

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);

}

Page 68: Igor Santos Grueiro. Ahora tenemos datos y datos …

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”) .

Page 69: Igor Santos Grueiro. Ahora tenemos datos y datos …

¡A programar !

Page 70: Igor Santos Grueiro. Ahora tenemos datos y datos …

Programación IIFicheros

Igor Santos Grueiro