igor santos grueiro. ahora tenemos datos y datos …
TRANSCRIPT
![Page 1: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/1.jpg)
Programación IIFicheros
Igor Santos Grueiro
![Page 2: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/2.jpg)
Ahora tenemos datos y datos …
![Page 3: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/3.jpg)
… pero ¿dónde están esos datos?
![Page 4: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/4.jpg)
Aquí NO están…
![Page 5: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/5.jpg)
… aquí
tampoco están esos datos…
![Page 6: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/6.jpg)
… entonces, ¿dónde están?
![Page 7: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/7.jpg)
Están aquí
![Page 8: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/8.jpg)
Y si alguien pulsa…
![Page 9: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/9.jpg)
… nos podemos pegar un tiro…
![Page 10: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/10.jpg)
… o utilizar
los ficheros
![Page 11: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/11.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/12.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/13.jpg)
Según su método de accesopueden clasificarse en
![Page 14: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/14.jpg)
Ficheros secuenciales
![Page 15: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/15.jpg)
Ficheros de
acceso directo
![Page 16: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/16.jpg)
Ficheros de
acceso indexado
![Page 17: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/17.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/18.jpg)
Y, ¿cómo se manejan los ficheros en Java?
![Page 19: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/19.jpg)
Hay que importar la biblioteca de manejo de entrada y salida
![Page 20: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/20.jpg)
import java.io.*;
Se añade en la cabecera
![Page 21: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/21.jpg)
Si vamos a meter objetos en el fichero…
![Page 22: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/22.jpg)
… el tipo (o clase) del objeto tiene
ser “Serializable”
![Page 23: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/23.jpg)
Y, ¿eso cómo se hace?
![Page 24: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/24.jpg)
public class NombreDeLaClase implements Serializable
![Page 25: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/25.jpg)
Los métodos que utilicen ficheros pueden
lanzar excepciones
![Page 26: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/26.jpg)
añadiremos
throws Exceptiona estos métodos
![Page 27: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/27.jpg)
public static void main(String [] args) throws Exception
![Page 28: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/28.jpg)
¿Cómo se utilizan los ficheros de salida?
![Page 29: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/29.jpg)
Crear un objeto de la clase FileOutputStream asociado al nombre
del fichero físico1
![Page 30: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/30.jpg)
FileOutputStream NombreObjetoFicheroFisico = new FileOutputStream(“NombreDelFichero.DAT”);
![Page 31: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/31.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/32.jpg)
ObjectOutputStream NombreObjetoFicheroLogico = new
ObjectOutputStream(NombreObjetoFicheroFisico);
![Page 33: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/33.jpg)
Para escribir en el fichero los objetos de una clase
concreta deberemos utilizar writeObject3
![Page 34: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/34.jpg)
NombreObjetoFicheroLogico.writeObject(VariableObjeto);
![Page 35: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/35.jpg)
Se puede grabar un objeto null como
marca de fin de fichero4
![Page 36: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/36.jpg)
NombreObjetoFicheroLogico.writeObject(null);
![Page 37: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/37.jpg)
Se cierra el fichero lógico5
![Page 38: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/38.jpg)
NombreObjetoFicheroLogico.close();
![Page 39: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/39.jpg)
¿Cómo se utilizan los ficheros de entrada?
![Page 40: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/40.jpg)
Crear un objeto de la clase FileInputStream
asociado al nombre del fichero físico1
![Page 41: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/41.jpg)
FileInputStream NombreObjetoFicheroFisico = new FileInputStream(“NombreDelFichero.DAT”);
![Page 42: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/42.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/43.jpg)
ObjectInputStream NombreObjetoFicheroLogico = new ObjectInputStream(NombreObjetoFicheroFisico);
![Page 44: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/44.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/45.jpg)
Pero ¡cuidado!, devuelve un objeto de la clase object
![Page 46: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/46.jpg)
Es necesario un casting
![Page 47: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/47.jpg)
Tipo t = (Tipo) ObjetoGenérico ;
![Page 48: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/48.jpg)
ClaseDelObjeto VariableObjeto = (ClaseDelObjeto)NombreObjetoFicheroLogico.readObject();
![Page 49: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/49.jpg)
Se realiza la lectura hasta
encontrar el objeto null
![Page 50: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/50.jpg)
while (VariableObjeto != null)
![Page 51: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/51.jpg)
Al finalizar se cierra el fichero lógico 4
![Page 52: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/52.jpg)
NombreObjetoFicheroLogico.close();
![Page 53: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/53.jpg)
Ya somos capaces de guardar nuestros datos
![Page 54: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/54.jpg)
para mantenerlos
a salvo
![Page 55: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/55.jpg)
Y como siempre: ¡A PRACTICAR!
![Page 56: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/56.jpg)
Vamos a crear una biblioteca
![Page 57: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/57.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/58.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/59.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/60.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/61.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/62.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/63.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/64.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/65.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/66.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/67.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/68.jpg)
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 …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/69.jpg)
¡A programar !
![Page 70: Igor Santos Grueiro. Ahora tenemos datos y datos …](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b42c1a28abb57c8fc23e/html5/thumbnails/70.jpg)
Programación IIFicheros
Igor Santos Grueiro