Saltar navegación

Clase 24-05-24 - 2 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 25 de mayo de 2024 por Raquel G.

10 visualizaciones

Descargar la transcripción

vale, vamos a 00:00:00
ejecutar este 00:00:07
main de aquí, que lo único que hace es 00:00:09
inserta dos alumnos en nuestra 00:00:11
lista de alumnos y luego como la aplicación 00:00:13
ya se va, pues los deja 00:00:15
guardados para la próxima vez 00:00:17
pues nada, vamos a ejecutar 00:00:19
esto y no 00:00:21
no ha pasado 00:00:25
pues nada, cuando nos salen cosas 00:00:26
rojas, fundamental es 00:00:29
ver qué tipo de excepción nos da, qué información nos da 00:00:31
y en qué momento ha ocurrido 00:00:36
sí, pero si no se la doy es que es la ruta por defecto, que es la raíz 00:00:38
del proyecto, ¿vale? o sea yo 00:00:45
tengo dos opciones, dar la ruta absoluta partiendo desde mi unidad de disco 00:00:48
en un archivo serializado 00:00:52
de objetos, no hay tipo, claro, entonces yo tengo la opción 00:01:01
de darle una ruta absoluta 00:01:05
y se identifica que es absoluta 00:01:07
porque partes directamente 00:01:09
de una unidad de disco 00:01:11
o si fuera en linux 00:01:12
porque partes directamente de la barra 00:01:15
o puedes no darle una ruta absoluta 00:01:18
como esta en la que no partes de una unidad de disco 00:01:21
si no partes de una unidad de disco 00:01:23
entonces él concatena esto 00:01:25
a la ruta por defecto 00:01:27
que es la raíz del proyecto 00:01:29
entonces como yo no le estoy dando una ruta absoluta 00:01:30
porque no tengo una unidad de disco de partida 00:01:33
él concatena eso a la raíz del proyecto 00:01:35
con lo cual alumnos me lo va a poner en la raíz 00:01:38
que yo le pongo esto 00:01:40
pues me pondría dentro de alumnos 00:01:44
perdón, en la raíz del proyecto 00:01:49
buscaría la subcarpeta SRC 00:01:51
y en esa subcarpeta de la raíz del proyecto 00:01:54
en este fichero 00:01:57
es decir, lo que yo le ponga aquí 00:01:58
lo concatena con 00:02:01
la carpeta raíz del proyecto 00:02:04
a menos que yo le esté dando una unidad de disco 00:02:06
entonces ya es absoluta y desde el disco 00:02:08
¿vale? en este caso 00:02:09
perdón 00:02:12
a ver 00:02:16
con la unidad de disco 00:02:22
más todas las carpetas que van 00:02:24
no, con la unidad de disco no, o sea no 00:02:26
porque no es esto 00:02:27
no concatena con eso, concatena con eso 00:02:29
más users alumno de eso 00:02:32
bla bla bla hasta que llegue a mi proyecto 00:02:34
cada ordenador la que tenga, da igual 00:02:36
el que tenga, por eso es relativa 00:02:38
porque este mismo 00:02:40
este mismo 00:02:41
proyecto en vuestro ordenador 00:02:43
funciona, pero la ruta que va adelante 00:02:46
no tiene nada que ver la mía con la tuya 00:02:48
y sigue funcionando, sin embargo 00:02:50
si yo pongo una ruta absoluta 00:02:52
y yo digo, no, no te la voy a dar así 00:02:54
te la voy a dar, espera, vamos a 00:02:59
poner aquí, vámonos a 00:03:01
mi proyecto que es este 00:03:02
ejemplo, alumnos 00:03:04
Me voy a poner aquí 00:03:10
Control-C 00:03:12
Vale 00:03:16
Yo tengo 00:03:17
Dos maneras de hacer lo mismo 00:03:23
En este caso 00:03:24
Uy, espérate 00:03:26
Control-C 00:03:27
Ya, pero es que hay veces que 00:03:32
A lo mejor hay gente que no lo tiene claro 00:03:36
Y es que esto hay veces que 00:03:37
Ejemplo 00:03:39
Alumnos 00:03:50
Alumnos 00:03:51
Es que muchas veces esto es lo que hace 00:03:52
de una aplicación este bien hecha. 00:04:03
Vale. Entonces, lo de arriba 00:04:04
y lo de abajo es lo mismo. 00:04:07
Me da igual esta sentencia que esta. 00:04:09
Me da igual. Estoy haciendo lo mismo. 00:04:11
Esta ruta y esta ruta son 00:04:13
idénticas. Son la misma. 00:04:15
Está claro, ¿no? 00:04:17
Son la misma. 00:04:19
¿Cuál es la diferencia? Que ahora este proyecto 00:04:20
se va a vuestro ordenador. 00:04:23
Con esta opción 00:04:25
va a seguir funcionando sin ningún problema 00:04:27
y con la de abajo no 00:04:29
porque puede que vosotros 00:04:30
la ruta hasta la raíz de vuestro proyecto 00:04:33
no sea esa, sea otra 00:04:35
pero sin embargo, si yo se la paso así como relativa 00:04:36
él va a coger la que 00:04:39
en vuestro ordenador 00:04:41
lleve a la raíz del proyecto 00:04:42
en mi ordenador a la raíz del proyecto 00:04:44
lleva esta, pero si yo se la casco 00:04:47
aquí, va a llevar esa 00:04:49
a misa, en este ordenador, en el vuestro, en cualquiera 00:04:51
si yo se la casco de esta 00:04:53
manera, va a ser capaz de coger 00:04:55
la local de cada equipo 00:04:57
por eso esta es relativa y esta es absoluta 00:04:58
porque esta cambia dependiendo del equipo 00:05:01
del que se ejecute, esta cambia 00:05:03
esta no cambia, esta me da igual 00:05:04
donde la ejecute, esa va a tomar esa 00:05:06
con lo cual en el mío no fallará, en el vuestro fallará 00:05:08
por eso siempre 00:05:11
hay que 00:05:12
trabajar con rutas absolutas porque si no 00:05:13
en el ordenador solo tienes la garantía 00:05:16
perdón, la aplicación solo tienes la garantía de que te funcione 00:05:18
en local, en el tuyo 00:05:20
si yo lo despliego en el Dell no me va a funcionar 00:05:22
pero esta versión 00:05:25
sí, ¿vale? entonces 00:05:26
esta y esta en mi ordenador 00:05:28
hacen lo mismo, pero en el vuestro 00:05:30
no, en el vuestro esta funciona y esta 00:05:32
no, vale, pues entonces 00:05:34
bueno, pues 00:05:38
entonces estábamos con que me ha dado un error 00:05:46
que tenemos que ver, que error es 00:05:48
que me dice 00:05:49
pues me dice 00:05:50
oye, alumno 00:05:53
no es serializable 00:05:55
vale, claro, efectivamente 00:05:57
porque hay que darle 00:06:00
ah, este es un error, silencio 00:06:02
que se olvida mucho 00:06:04
pues conviene que identifiquéis esta excepción 00:06:05
porque es un error que se olvida mucho 00:06:08
entonces identificarla 00:06:10
¿qué significa esto? 00:06:11
que a la entidad alumno 00:06:12
no se le ha dado el comportamiento 00:06:13
de que sea serializable 00:06:16
no se le ha dado ese comportamiento 00:06:17
y darle un comportamiento a una entidad 00:06:20
¿cómo se consigue? 00:06:22
haciendo la que implemente una interfaz 00:06:24
¿verdad? 00:06:26
para eso son las interfaces 00:06:27
las interfaces fijan 00:06:28
un patrón de comportamiento 00:06:30
a través de sus métodos 00:06:32
patatín, patatín, patatán 00:06:33
el que implementa esa interfaz 00:06:35
automáticamente 00:06:37
adquiere esos métodos 00:06:38
y por tanto puede comportarse ya 00:06:41
de esa manera, los puede sobrescribir 00:06:43
o no, eso ya es otra cosa 00:06:45
bueno, pues entonces, nuestro error 00:06:47
aquí es que 00:06:49
alumno 00:06:51
¿vale? 00:06:54
no implementaba serializable 00:06:57
pues no pasa nada 00:06:58
vamos a hacerle que implemente 00:07:00
la interfaz serializable 00:07:02
lo importáis del paquete correspondiente 00:07:07
que es java.io 00:07:10
y ya está 00:07:11
y ahora ya esta clase ha adquirido 00:07:12
el comportamiento que le da esta interfaz 00:07:15
esta interfaz tiene métodos dentro 00:07:17
con códigos por defecto 00:07:19
con codificación por defecto 00:07:21
ya la ha adquirido 00:07:22
entonces si queremos serializar 00:07:23
objetos de una clase 00:07:26
esa clase tiene que implementar 00:07:28
la interfaz serializable 00:07:30
vale, y no solo esa clase 00:07:32
porque 00:07:35
si esta clase tiene dentro 00:07:36
propiedades de otras clases 00:07:38
como esas propiedades 00:07:41
también se van a tener que visualizar por dentro 00:07:42
esas clases también lo tendrán que ser 00:07:44
pero en este caso 00:07:46
solo tengo string y string 00:07:47
y string 00:07:51
es que ya lo son, si yo me meto en la 00:07:52
declaración de string, ya lo es 00:07:54
ya lo tiene ya puesta 00:07:57
¿vale? 00:07:58
pero si yo aquí en alumno 00:08:01
pues resulta que utilizo una clase 00:08:03
matrícula 00:08:05
en lugar de string 00:08:06
porque tengo una clase matrícula 00:08:09
con las propiedades de la matrícula 00:08:10
pues entonces esta clase matrícula 00:08:12
también tendría que implementar serializable 00:08:14
porque dentro de alumno hay matrículas 00:08:16
y se tiene que serializar todo 00:08:19
el alumno con todos los objetos que hay dentro 00:08:20
pero en este caso 00:08:23
callaos 00:08:25
pero en este caso 00:08:27
string ya lo es 00:08:29
y no tengo otro tipo de dato que no sea 00:08:30
o primitivo 00:08:32
que el primitivo es que se lleva tal cual 00:08:33
no hay que serializar, se lleva tal cual 00:08:36
no tengo otro tipo de dato que no sea primitivo 00:08:37
o serializable de por sí 00:08:39
como string 00:08:42
bueno pues con estos en principio ya hemos dado 00:08:43
todo el comportamiento que hace falta 00:08:46
si lo volvemos a ejecutar 00:08:47
ahora ya error no ha dado 00:08:50
y vamos a ver si ha aparecido el fichero 00:08:54
vale, ha aparecido aquí un fichero 00:08:58
de alumnos 00:09:02
obviamente si abrimos este archivo 00:09:02
no entendemos absolutamente nada 00:09:06
porque ¿qué hacemos al abrirlo? 00:09:08
estamos haciendo 00:09:11
que un editor de texto lo interprete 00:09:11
¿y el editor de texto qué hace? 00:09:15
pues el editor de texto va cogiendo bits de 8 en 8 00:09:16
va a la tabla ASCII 00:09:18
lo convierte al carácter y te lo planta 00:09:20
eso es lo que hace el editor de texto 00:09:22
le hemos dado un fichero con un montón de bits 00:09:23
dice vale, muy bien, yo soy un editor de texto 00:09:25
lo único que yo sé hacer es 00:09:27
te cojo los 8 primeros, tabla ASCII, carácter que toca 00:09:29
te lo planto, te cojo los 8 siguientes 00:09:32
tabla ASCII, carácter que toca 00:09:33
ese fichero no codificaba 00:09:35
ASCII, con lo cual 00:09:37
nos ha sacado cosas 00:09:39
¿vale? algunos caracteres 00:09:40
tienen sentido porque en la serialización 00:09:43
algunas cosas van como char 00:09:45
pero muchas otras no, todos los cuadraditos 00:09:47
se corresponden 00:09:49
a bytes que en la tabla 00:09:51
ASCII no tienen correspondencia, no la tienen, no existen 00:09:53
por eso el leidor 00:09:55
texto pone cuadraditos 00:09:57
luego, este fichero 00:09:58
obviamente no vale para abrirlo con 00:10:01
ninguna aplicación, este fichero está 00:10:03
ahí simplemente para que cuando 00:10:05
mi aplicación Java arranque 00:10:07
otra vez lo deserialice con la clase 00:10:08
correspondiente, con la complementaria 00:10:11
a object output string que es 00:10:13
object input string, es para lo único 00:10:15
que vale este fichero, para ahora 00:10:17
que otra aplicación con object 00:10:19
input string haga la operación inversa 00:10:21
pero no se puede abrir con ningún 00:10:23
otro 00:10:25
aplicación, bueno pues entonces 00:10:25
aquí ahora ya podríamos 00:10:30
en mi clase esta de aquí, operaciones 00:10:33
pues podríamos 00:10:36
hacer un método 00:10:38
para que recuperara 00:10:39
objetos del archivo y los guardara 00:10:41
aquí 00:10:44
y yo ese método le llamo cuando arranca la aplicación 00:10:44
por ejemplo, y así cuando la aplicación 00:10:48
arranca, este list 00:10:50
ya se llena con los objetos 00:10:52
que haya en ese archivo 00:10:54
si es que los hay 00:10:55
pues venga, vamos a hacer 00:10:57
ese método 00:11:00
que sería 00:11:01
en lugar del método guardar datos 00:11:03
pues recuperar datos 00:11:05
y le podemos pasar pues el nombre 00:11:06
del fichero donde 00:11:18
suponemos 00:11:19
que están los alumnos 00:11:21
vale, pues aquí hombre, esto para que fuera más general 00:11:23
podríamos primero mirar a ver 00:11:29
si el archivo existe o no 00:11:31
porque si el archivo no existe 00:11:32
pues entonces no hay alumnos que recuperar 00:11:35
el método ya termina, la lista se habrá 00:11:37
que se quedará vacía como estaba 00:11:39
y ya está 00:11:41
entonces podemos hacerlo primero esto 00:11:42
instanciar un objeto file 00:11:44
asociado 00:11:46
a este nombre 00:11:47
non-fichero 00:11:51
y ahora ya podemos hacer 00:11:58
si resulta que el fichero f no existe 00:12:10
pues no hay nada que hacer 00:12:13
return, no hay nada que recuperar 00:12:14
que se quede la lista como estaba, que era vacía 00:12:16
sin alumnos 00:12:18
esto en función 00:12:19
si es una interfaz gráfica o no lo es 00:12:22
pues se podría avisar, no hay alumnos previos 00:12:27
lo que sea, ya está 00:12:29
si el fichero no existe, return 00:12:31
y ahora ya el fichero existe, pues ahora ya 00:12:32
podemos abrirlo para deserializar 00:12:35
y la clase para deserializar es esta 00:12:38
object 00:12:40
input stream 00:12:42
ya vamos a referencia 00:12:45
como nos dé la gana 00:12:48
y lo mismo que la output 00:12:49
object 00:12:52
input stream está montada 00:12:59
sobre un file input stream 00:13:00
porque object input string 00:13:02
lo que tiene que hacer es 00:13:05
hay de verdad 00:13:06
hay tres bares enfrente 00:13:09
o cuatro, no sé cuántos hay 00:13:11
pues largaos a esos bares 00:13:12
que ahí no van a 00:13:15
no vais a salir el coñazo, bueno, a ver 00:13:17
seguramente también, pero que os aguante 00:13:18
otro, yo no voy a aguantar 00:13:21
entonces esta clase 00:13:22
lo primero que hará será mover los bits 00:13:26
y para mover los bits file input string 00:13:29
no hay otra 00:13:31
y luego ya con esos bits 00:13:31
ahí ya tendrá sus métodos 00:13:34
para deserializarlos, hacer lo que tienen 00:13:36
llevarlos a las propiedades del objeto, hacer todo lo que haga falta 00:13:37
pero hay que 00:13:40
darle el FileInputString sobre el que está montado 00:13:42
pues el FileInputString 00:13:44
sobre el que está montado, pues es un FileInputString 00:13:48
asociado al non-fichero ese 00:13:50
que me han dado, o a F 00:13:52
me da igual 00:13:56
el costo es el mismo 00:13:57
venga, pues nada, tendremos 00:13:59
que importar esto 00:14:02
y esto 00:14:04
y propagar la excepción correspondiente. 00:14:08
¡Hala! 00:14:15
Y ahora, leer es más complicado 00:14:15
que escribir, porque escribir es 00:14:18
escribo y ahí lo mando. Y ya está. 00:14:19
¿La siguiente escritura que haga? Pues se hará justo 00:14:22
debajo. Pero leer, 00:14:24
como no tenemos la información de lo que hay, 00:14:26
tenemos que hacer un bucle, 00:14:28
un bucle que vaya leyendo hasta llegar al final. 00:14:29
No sabemos cuántas lecturas hay que hacer. 00:14:32
5, 20, ni idea. 00:14:33
depende de lo que hay en el archivo 00:14:35
alguna vez 00:14:37
podemos llamar a recuperar datos y a lo mejor hay 30 00:14:40
pues tendremos que darle 30 veces 00:14:42
sin embargo puede ser 00:14:43
que la siguiente vez que lleguemos a recuperar archivo 00:14:46
haya solo 20, pues entonces habrá que hacer 20 veces 00:14:47
entonces será un bucle 00:14:49
que está leyendo mientras 00:14:50
no hayamos llegado al final 00:14:53
y cada lectura es un objeto 00:14:55
cada lectura es un objeto 00:14:57
¿vale? bueno pues aquí 00:14:59
el bucle de fin de archivo no es tan sencillo 00:15:01
como el otro ejemplo que hemos visto 00:15:03
porque leía solamente un int 00:15:05
entonces marcar el fin de archivo era tan sencillo 00:15:07
como decir si ese int es menos uno, llega al final 00:15:09
y si es cualquier otra cosa 00:15:11
no he llegado al final 00:15:14
cojo el menos significativo y listo 00:15:15
aquí la forma más general de plantearlo 00:15:17
el acordarse, el identificar 00:15:20
que hay una excepción 00:15:24
que recoge 00:15:25
el hecho de que cuando uno está 00:15:27
leyendo un archivo, llegue al final 00:15:29
esa 00:15:31
excepción 00:15:32
se llama así 00:15:34
no sé si tiene dos Fs o no, vamos a buscarla 00:15:36
aquí, ya que estamos 00:15:41
tan... 00:15:42
es una excepción que ya está hecha 00:15:47
y está incorporada en la librería 00:15:49
de la máquina virtual 00:15:51
está en java.io, que java.io 00:15:52
está aquí 00:15:55
pues en este paquete 00:15:56
hay una excepción 00:15:59
que se llama 00:16:02
EOF exception, el file me lo he sacado de la manga 00:16:03
EOF exception 00:16:05
vale, pues 00:16:07
en off file exception 00:16:10
vale, pues esta excepción es una excepción 00:16:18
que lanza la máquina 00:16:20
la máquina virtual no la lanza 00:16:22
la lanzará cualquiera de las clases 00:16:23
que hacen lectura, input, file, input 00:16:26
string, cualquiera de las que hacen lectura 00:16:28
si fuéramos a mirar en su código 00:16:30
como lo hacen, veríamos que hace un 00:16:32
throw en off file exception cuando 00:16:34
se detecta una situación de 00:16:36
incapacidad del hardware 00:16:38
de seguir leyendo 00:16:40
vale, pues entonces podemos utilizar 00:16:41
esta excepción 00:16:44
para hacer un bucle 00:16:45
con el try-catch 00:16:46
y decir, mientras yo no entre en el catch 00:16:48
es porque tengo algo más que leer 00:16:51
vale, entonces podríamos 00:16:53
hacerlo de esta manera, y tendríamos el bucle de lectura 00:16:55
más genérico que hay 00:16:57
que es el siguiente, esto lo dejamos aquí 00:16:58
aparcadito, que es 00:17:01
vamos a hacer un bucle, vamos a hacer primero un boolean 00:17:02
para indicar yo si he llegado 00:17:05
al final o no 00:17:07
fin archivo 00:17:08
entonces inicialmente no he llegado al final 00:17:10
falso, y ahora me hago 00:17:13
mi bucle 00:17:15
mientras no haya llegado a fin archivo 00:17:15
vale, pues entonces yo tengo 00:17:19
aquí 00:17:28
este boolean que quiero construir 00:17:28
de tal manera que inicialmente es 00:17:32
falso porque no he llegado al final 00:17:34
pero que aquí dentro 00:17:35
se ponga true cuando he llegado al final 00:17:36
eso es lo que yo quiero 00:17:39
que aquí dentro en algún momento se ponga true 00:17:41
vale, ¿qué voy a querer hacer yo aquí dentro? 00:17:43
leer un objeto alumno 00:17:45
¿Vale? Porque los tengo que ir leyendo uno por uno 00:17:46
Igual que los caracteres, los leía de uno en uno 00:17:49
Los bai de uno en uno 00:17:51
Pues vamos a leer un objeto alumno 00:17:52
Alumno a, ¿y cómo lo leemos? 00:17:54
Pues con el object input string que hemos hecho aquí 00:17:56
Con su método 00:17:59
React object 00:18:01
Ala, con este leemos un alumno 00:18:02
Pero este método 00:18:08
Está programado 00:18:10
Está declarado 00:18:11
De tal manera que te lo devuelve como un object 00:18:12
Porque claro, es un método 00:18:16
que te puede leer cualquier tipo de objeto 00:18:17
está programado para que te lo vuelva como un object 00:18:19
aunque él internamente te hace un instance of 00:18:22
para que el casting funcione, etc. 00:18:24
pero entonces para que el compilador 00:18:27
se quede callado 00:18:28
hay que hacer un casting 00:18:29
para que se quede callado 00:18:31
y oye, esto que estás leyendo 00:18:33
hazme casting alumno 00:18:35
y este casting va a funcionar sin problema 00:18:38
en este caso, pero vamos 00:18:40
va a funcionar sin problema en este caso porque nosotros 00:18:42
somos los que hemos generado 00:18:44
este archivo y sabemos que hay objetos 00:18:46
alumno, si nos pudisiéramos 00:18:48
hacer read object de otro objeto 00:18:50
que no tiene alumno, si hiciéramos el casting 00:18:52
alumno, pues petaría 00:18:54
claro, pero nuestra 00:18:56
aplicación está coordinada 00:18:58
el método de guardar está coordinado 00:18:59
con el de recuperar, es una aplicación 00:19:02
obviamente que está coordinada para que funcione 00:19:03
y sabemos que este 00:19:05
flujo está conectado 00:19:07
a un archivo que tiene objetos 00:19:10
alumno, entonces podemos hacer 00:19:11
el casting sin problema 00:19:14
bueno, pues vamos leyendo de uno en uno 00:19:15
y esto 00:19:17
puede lanzar una excepción 00:19:20
que ponemos en el throw para no molestar 00:19:21
y ahora 00:19:24
el fin archivo este 00:19:25
¿cómo cambiará? 00:19:29
en algún momento tendrá que cambiar y ponerse a true 00:19:31
porque hemos llegado al final 00:19:32
claro, pues nosotros queremos ponerlo a true 00:19:34
cuando este read object 00:19:37
saque una excepción de este tipo 00:19:39
cuando este read object 00:19:41
saque una excepción de este tipo 00:19:43
es porque hemos llegado a fin de archivo 00:19:45
pues entonces vamos a capturar 00:19:47
esta sentencia 00:19:50
vamos a capturarla y vamos a decir 00:19:51
oye, tú intenta hacerla 00:19:53
y si resulta que como consecuencia de hacerla 00:19:55
te encuentras esto 00:19:58
que sale una excepción 00:20:01
en off-file exception 00:20:03
pues la capturas 00:20:06
que no es obligatorio capturarla 00:20:07
por eso yo cuando tenía esto sin el try-catch 00:20:10
ahí el compilador estaba tan tranquilo 00:20:12
no es obligatorio 00:20:13
porque esta es run time exception 00:20:14
esta no es exception 00:20:17
pero a mi me interesa capturarla para detectar 00:20:18
cuando ha salido 00:20:21
porque cuando haya salido entonces lo que yo quiero es 00:20:22
fin archivo 00:20:26
igual a true 00:20:27
y la importo 00:20:28
en not file exception dejaba ahí 00:20:31
vale pues ahora ya 00:20:33
capturando esta excepción 00:20:36
que puedo no capturarla 00:20:38
y si no la capturo cuando salga 00:20:41
pues la vas a ir en rojo ahí 00:20:42
capturando esta excepción 00:20:44
cuando el readObject 00:20:46
no haya podido leer 00:20:48
no haya podido porque está al final 00:20:49
entonces saltará esto 00:20:51
y esto se pondrá true 00:20:53
y ahora el while cuando vuelva arriba dirá 00:20:55
uy, condición false 00:20:57
y ya está, y se acabará 00:20:59
entonces este bucle de lectura 00:21:01
es muy genérico, nos permite usar 00:21:04
con el tryCast de excepción 00:21:06
nos permite hacer lecturas 00:21:08
con cualquier método de lectura 00:21:10
de cualquier clase que haga lecturas 00:21:12
y que me devuelvo un en of file 00:21:14
po venga 00:21:19
y ahora ya está 00:21:20
entonces ahora este objeto 00:21:25
este método está leyendo 00:21:26
y ahora que haré yo aquí con cada objeto alumno 00:21:27
meterlo en la lista 00:21:30
eso es lo que yo querré 00:21:31
en mi lista de alumnos 00:21:32
quiero meter ese alumno 00:21:35
vale pues ya tengo mi método 00:21:36
a falta de cerrar 00:21:42
el flujo que acabo de abrir 00:21:45
ya tengo mi método 00:21:48
que está todo el rato 00:21:52
si el archivo no existe, no hace nada 00:21:54
y si existe, se pone 00:21:58
lee un alumno de él, lo manda a la lista 00:22:00
lee otro alumno, lo manda a la lista, así hasta que no haya más alumnos 00:22:03
bueno, pues entonces ahora ya, mi aplicación arranca 00:22:06
lo primero que yo tendría que hacer 00:22:13
ahora cuando mi aplicación arranca en mi main 00:22:17
sería, antes que nada 00:22:19
voy a recuperar los que haya 00:22:22
Para partir con los que dejé guardados 00:22:24
De la última vez 00:22:26
¿Vale? Recuperar alumnos y le doy el nombre 00:22:27
De archivo con el que voy a trabajar 00:22:37
Pues venga, alumnos 00:22:38
En este caso, alumnos 00:22:39
Y esto 00:22:42
Un throws 00:22:44
Vale, vamos a comprobar si funciona 00:22:46
Poniéndole aquí 00:22:51
Se han recuperado no sé cuántos alumnos 00:22:52
Para ver si los ha recuperado 00:22:55
Se han recuperado 00:22:56
Del 00:22:59
Fichero 00:23:00
Pues cuánto se ha recuperado del fichero 00:23:03
Pues se habrán recuperado 00:23:07
Los que haya en 00:23:08
Alumnos.size 00:23:09
No se llama alumnos 00:23:12
Ah, es que no está aquí, está en operaciones 00:23:21
Sí, está en operaciones la lista, ¿no? 00:23:23
Operaciones 00:23:31
Punto alumnos 00:23:32
Punto size 00:23:34
Estos son los que se han 00:23:36
recuperado, luego él sigue insertando 00:23:38
en este caso no los va a insertar 00:23:40
porque como estos ya están, que los he guardado de antes 00:23:42
pues no los va a insertar 00:23:43
es una lista 00:23:45
ah bueno, sí, porque es una lista 00:23:48
no es un set, luego admite duplicados 00:23:49
vale, los insertaría igual en otra posición 00:23:51
vale 00:23:54
y ahora operación guardar 00:23:55
los volvería a guardar 00:23:57
en este caso los cuatro 00:23:59
vamos a ver primero, antes que nada 00:24:01
si me dice cuando yo ejecute este 00:24:03
que se han recuperado dos, porque antes 00:24:06
hemos insertado estos dos, que yo sepa 00:24:08
vamos a 00:24:10
me parece ahí, que pena 00:24:14
se me ha quitado de ahí 00:24:22
pues efectivamente había dos 00:24:23
que son los que ha recuperado 00:24:33
y yo podría aquí 00:24:35
y ahora 00:24:36
habrá otros cuatro, porque ha insertado 00:24:39
estos, como es una lista, repito, no es un set 00:24:41
aunque están duplicados 00:24:43
los meterá 00:24:45
a menos que en insertar alumno 00:24:45
ese método, mirar a ver si estaba o no, no lo sé 00:24:48
y los ha vuelto a guardar, vamos a volver al main 00:24:51
a ver si me dice ahora, se han recuperado 4 00:24:53
efectivamente, se han recuperado 4 00:24:56
y cada vez que le demos, pues 00:25:01
bueno, le he dado tantas veces 00:25:03
ya que ya le he matado 00:25:08
vale, sí 00:25:09
ya sé lo que ha pasado, esto olvidaros 00:25:11
porque le he dado, vale 00:25:13
bueno, pues este uso, es el uso 00:25:15
más básico que hay de object input string 00:25:19
o de output string, que es el más básico 00:25:21
nos permite al menos 00:25:23
hacer una aplicación 00:25:26
en el cual mis datos estén ahí 00:25:27
la aplicación arrancará 00:25:30
yo decidiré en cómo lo tengo que recuperar 00:25:32
cómo lo tengo que guardar, etc. 00:25:33
¿Vale? 00:25:37
Que no te los recupera 00:25:44
pero te da excepción 00:25:45
Porque el fichero tiene cosas, tiene bytes 00:25:46
aunque no podamos ver 00:25:57
el contenido 00:25:59
tiene 00:26:00
vale 00:26:00
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
10
Fecha:
25 de mayo de 2024 - 17:59
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
26′ 19″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
120.43 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid