1 00:00:00,940 --> 00:00:09,820 entonces me he creado aquí una clase app que es una palabra está vacía vale me ha hecho una clase 2 00:00:09,820 --> 00:00:17,500 alumno y ahora lo que vamos a hacer es intentar crear una pequeña clase que lo que hagan a crear 3 00:00:17,500 --> 00:00:28,940 alumnos y pero me los guarde en un fichero como objetos y no como como tipo de texto 4 00:00:28,940 --> 00:00:34,079 vale, esto es desde cero 5 00:00:34,079 --> 00:00:36,399 por lo tanto vamos a repasar 6 00:00:36,399 --> 00:00:37,679 también como se hace 7 00:00:37,679 --> 00:00:40,000 todo, vale, entonces aquí 8 00:00:40,000 --> 00:00:42,140 lo que vamos a 9 00:00:42,140 --> 00:00:44,100 crear es una aplicación 10 00:00:44,100 --> 00:00:45,979 hacemos dos 11 00:00:45,979 --> 00:00:48,240 aplicaciones distintas, una aplicación 12 00:00:48,240 --> 00:00:50,079 que simplemente es para guardar 13 00:00:50,799 --> 00:00:51,600 los 14 00:00:51,600 --> 00:00:55,859 los objetos, vale, los 15 00:00:55,859 --> 00:00:57,600 alumnos, etc, etc 16 00:00:57,600 --> 00:01:13,859 Y luego hacemos una aplicación distinta que en vez de lo que se encarga es de cargar los objetos y visualizarlos, ¿vale? Así, se podría hacer como hemos hecho la otra vez en dos tabs y luego cambio de tab a otro, pero más o menos da igual. 17 00:01:13,859 --> 00:01:17,219 Entonces, esta de aquí será la app para crear alumnos. 18 00:01:17,659 --> 00:01:20,859 La hago fea porque no tengo ganas de perder tiempo en esto. 19 00:01:20,980 --> 00:01:23,040 Pero, bueno, ¿me entendéis? 20 00:01:23,180 --> 00:01:25,579 Aquí tenemos TextField. 21 00:01:25,579 --> 00:01:35,609 Antes del TextField, cambio este de aquí en un Absolute. 22 00:01:36,390 --> 00:01:37,310 TextField. 23 00:01:37,569 --> 00:01:42,140 Esto será el nombre. 24 00:01:44,439 --> 00:01:47,319 Esto será el apellido. 25 00:01:47,319 --> 00:02:01,700 aquí habrá un botón para añadir 26 00:02:01,700 --> 00:02:08,110 vamos a intentar 27 00:02:08,110 --> 00:02:10,650 para añadirlo a la 28 00:02:10,650 --> 00:02:12,150 ¿cómo se dice? 29 00:02:13,490 --> 00:02:16,229 a la estructura dinámica que va a ir construyendo 30 00:02:16,229 --> 00:02:20,090 y luego hacemos que 31 00:02:20,090 --> 00:02:22,629 intentamos hacer que al cerrar 32 00:02:22,629 --> 00:02:24,870 ayer lo hicimos y luego no lo hicimos 33 00:02:24,870 --> 00:02:27,110 al cerrar esta aplicación 34 00:02:27,110 --> 00:02:30,270 como última cosa que haga antes de cerrarse el todo 35 00:02:30,270 --> 00:02:38,389 Intente guardar el fichero, o sea los datos que ha creado en un fichero 36 00:02:38,389 --> 00:02:39,990 Y se apaga así, vale 37 00:02:39,990 --> 00:02:43,129 Vamos a verlo, si lo conseguimos 38 00:02:43,129 --> 00:02:47,710 Entonces este botón de aquí lo llamamos save o add 39 00:02:47,710 --> 00:02:51,490 Y pondremos add 40 00:02:51,490 --> 00:03:00,099 Este de aquí lo llamamos txt nombre 41 00:03:00,099 --> 00:03:03,879 este de aquí 42 00:03:03,879 --> 00:03:06,099 lo llamamos 43 00:03:06,099 --> 00:03:07,319 txt 44 00:03:07,319 --> 00:03:09,659 apellido 45 00:03:09,659 --> 00:03:14,840 vale 46 00:03:14,840 --> 00:03:16,740 aquí debería poner 47 00:03:16,740 --> 00:03:18,419 una cosa más bonita 48 00:03:18,419 --> 00:03:21,199 pero vamos a la funcionalidad 49 00:03:21,199 --> 00:03:22,620 vale, no vamos a la 50 00:03:22,620 --> 00:03:25,099 a la estética 51 00:03:25,099 --> 00:03:26,900 ok, entonces 52 00:03:26,900 --> 00:03:28,620 ahora tengo estas dos cosas 53 00:03:28,620 --> 00:03:30,039 cuando le doy al botón add 54 00:03:30,039 --> 00:03:32,479 tengo un action listener 55 00:03:32,479 --> 00:03:33,740 que tiene que hacer algo, vale 56 00:03:33,740 --> 00:03:46,710 primero de todo tengo que ponerme aquí donde guardo las cosas vale entonces tendré un arre 57 00:03:46,710 --> 00:03:51,689 listo un linked listo una estructura de este tipo un set podría hacer un set para que si 58 00:03:51,689 --> 00:03:58,949 intentas añadir dos veces el mismo alumno no te lo añade dos veces y que si lo añades una segunda 59 00:03:58,949 --> 00:04:08,449 vez lo sobre escribe o algo por el estilo vale no lo sé se podría hacer una set para intentar 60 00:04:08,449 --> 00:04:16,589 hacer que haya como clave un el identificador para que luego sea más fácil buscar un alumno 61 00:04:16,589 --> 00:04:29,889 por identificador por ejemplo hay varias opciones está dejo vosotros a monset set alumnos es igual 62 00:04:29,889 --> 00:05:03,269 al año más set luego si necesito algo más de asset lo pondré aquí también pero si lo hago 63 00:05:03,269 --> 00:05:05,410 así, mañana si quiero cambiar 64 00:05:05,410 --> 00:05:07,250 esto en una cosa distinta 65 00:05:07,250 --> 00:05:08,870 como un trisecto o cosa por el estilo 66 00:05:08,870 --> 00:05:10,910 no me importa porque ya 67 00:05:10,910 --> 00:05:13,230 esto 68 00:05:13,230 --> 00:05:15,310 lo cojo, ¿vale? por eso lo dejo más 69 00:05:15,310 --> 00:05:17,449 con una super clase 70 00:05:17,449 --> 00:05:19,089 en vez que una super clase, si ahora 71 00:05:19,089 --> 00:05:21,029 cuando estoy haciendo trabajo me doy cuenta 72 00:05:21,029 --> 00:05:22,970 que necesito algo más de esto 73 00:05:22,970 --> 00:05:24,810 pues ya, ¿vale? 74 00:05:25,649 --> 00:05:27,129 entonces, ahora 75 00:05:27,129 --> 00:05:29,329 aquí, al botón 76 00:05:29,329 --> 00:05:31,129 add, me crea un nuevo 77 00:05:31,129 --> 00:05:32,990 alumno, alumno 78 00:05:32,990 --> 00:05:35,790 A es igual a new alumno 79 00:05:35,790 --> 00:05:36,290 De 80 00:05:36,290 --> 00:05:41,089 Txt 81 00:05:41,089 --> 00:05:42,769 Txt 82 00:05:42,769 --> 00:05:46,050 Nombre punto get text 83 00:05:46,050 --> 00:05:48,629 Coma 84 00:05:48,629 --> 00:05:51,930 Txt apellido 85 00:05:51,930 --> 00:05:54,189 Punto get text 86 00:05:54,189 --> 00:05:58,050 Punto y coma 87 00:05:58,050 --> 00:06:00,110 Vamos a hacer un paréntesis 88 00:06:00,110 --> 00:06:01,829 Vale 89 00:06:01,829 --> 00:06:03,750 Y con esto me crea un alumno 90 00:06:03,750 --> 00:06:26,300 Y ahora lo que haré es que alumnos.ad, esta cosa aquí lo que me está haciendo es, cada vez que le doy al botón ad me añade en este set, este alumno. 91 00:06:27,300 --> 00:06:48,279 Pregunta para vosotros, entrego esto, ¿cuánto saco? ¿Qué me falta? ¿Qué no he hecho que debería hacer y que suspenda automáticamente el RA7? 92 00:06:48,279 --> 00:06:56,860 colecciones, el que habéis suspendido todos 93 00:06:56,860 --> 00:07:00,480 ah bueno, entonces el RSI 94 00:07:00,480 --> 00:07:03,139 colección 95 00:07:03,139 --> 00:07:04,819 ¿por qué he suspendido 96 00:07:04,819 --> 00:07:05,759 las colecciones? 97 00:07:09,680 --> 00:07:12,279 la idea es también que el lunes 98 00:07:12,279 --> 00:07:13,839 lunes, o sea, no 99 00:07:13,839 --> 00:07:15,920 dentro de seis meses, lunes 100 00:07:15,920 --> 00:07:17,879 hacemos un examen 101 00:07:17,879 --> 00:07:20,120 para que vosotros podáis recuperar 102 00:07:20,120 --> 00:07:22,240 el 6 con el objetivo 103 00:07:22,240 --> 00:07:24,100 que vosotros estudiéis algo 104 00:07:24,100 --> 00:07:25,459 y recuperéis el 6 105 00:07:25,459 --> 00:07:27,540 pero si no estudiáis 106 00:07:27,540 --> 00:07:28,899 no lo vais a recuperar 107 00:07:28,899 --> 00:07:31,660 la idea es que 108 00:07:31,660 --> 00:07:33,759 en estas semanas vosotros habéis estado 109 00:07:33,759 --> 00:07:35,560 haciendo ejercicios sobre clases 110 00:07:35,560 --> 00:07:37,519 sobre 111 00:07:37,519 --> 00:07:38,560 colecciones 112 00:07:38,560 --> 00:07:54,139 ¿no? el intento es bueno 113 00:07:54,139 --> 00:07:55,839 pero lo que has dicho no 114 00:07:55,839 --> 00:08:01,100 vuestro compañero ha dicho 115 00:08:01,100 --> 00:08:02,680 hay que hacer el equals 116 00:08:02,680 --> 00:08:04,600 porque es un hash 117 00:08:04,600 --> 00:08:11,439 estabas allí, cuando has dicho 118 00:08:11,439 --> 00:08:13,600 hay que definir el equals, has dicho, ah menos mal 119 00:08:13,600 --> 00:08:14,800 porque es un hash 120 00:08:14,800 --> 00:08:19,800 Claro, hay que hacer el equals porque es un set 121 00:08:19,800 --> 00:08:25,279 Y el h porque es un hset 122 00:08:25,279 --> 00:08:32,600 Pero acordaos que todas las veces que me tocáis un set o cosa por el estilo 123 00:08:32,600 --> 00:08:36,919 Como el set se basa en que no puedo añadir dos veces el mismo alumno 124 00:08:36,919 --> 00:08:44,600 Entonces necesito definir cuándo dos alumnos son iguales 125 00:08:45,500 --> 00:08:47,120 Entonces tengo que tocar el equals. 126 00:08:47,519 --> 00:08:51,440 Y cada vez que toco el equals tengo que tocar el hash, el hash code, ¿vale? 127 00:08:52,059 --> 00:08:58,419 Sobre todo porque este es un hash set, entonces utilizará el hash code para guardar las cosas ahí dentro, organizar las cosas. 128 00:08:58,899 --> 00:09:01,820 Pues entonces necesito toquetear los dos. 129 00:09:01,820 --> 00:09:06,779 Y en alumno, como la otra vez estaba haciendo un, ¿cómo se llama esto? 130 00:09:07,200 --> 00:09:10,139 Un relist, pues entonces no los he puesto. 131 00:09:10,139 --> 00:09:15,080 Pero bueno, simplemente me voy aquí y le digo, 132 00:09:18,470 --> 00:09:20,450 genérame un hash code y un equals. 133 00:09:20,850 --> 00:09:26,330 Pregunta para vosotros, ¿el equals y el hash code sobre qué se tienen que basar? 134 00:09:26,429 --> 00:09:28,629 Es decir, ¿cuándo dos alumnos son iguales? 135 00:09:40,120 --> 00:09:42,740 Cuando tienen la misma idea. Por eso existe la idea. 136 00:09:43,539 --> 00:09:45,840 No me interesa el nombre y el apellido. 137 00:09:47,259 --> 00:09:48,600 Me interesa la idea. 138 00:09:49,600 --> 00:09:50,279 ¿Sí? 139 00:09:50,279 --> 00:09:56,039 ¿Sí? Técnicamente podría haber dos alumnos que se llamen exactamente igual. 140 00:09:56,679 --> 00:10:00,779 Lo hecho es que si tienen también el mismo ID, pues son el mismo alumno. 141 00:10:01,340 --> 00:10:05,139 Si tienen ID distintos, pues son dos alumnos que se llaman igual. 142 00:10:06,000 --> 00:10:08,379 ¿Sí? Entonces lo que me interesa de verdad es el ID. 143 00:10:09,500 --> 00:10:10,860 Entonces aquí marco solo el ID. 144 00:10:11,720 --> 00:10:12,279 Generate. 145 00:10:12,279 --> 00:10:14,399 y aquí ahora tengo mi 146 00:10:14,399 --> 00:10:16,240 equals y mi hashcode 147 00:10:16,240 --> 00:10:17,840 ¿vale? basados 148 00:10:17,840 --> 00:10:20,340 sobre el identificador de este alumno 149 00:10:20,340 --> 00:10:22,259 ¿sí? vale 150 00:10:22,259 --> 00:10:23,879 perfecto 151 00:10:23,879 --> 00:10:25,059 lo hago aquí 152 00:10:25,059 --> 00:10:28,220 y ya está, entonces este de aquí 153 00:10:28,220 --> 00:10:30,679 me debería funcionar 154 00:10:30,679 --> 00:10:32,200 ahora mismo añadiendo 155 00:10:32,200 --> 00:10:34,299 la cosa, hagamos un 156 00:10:34,299 --> 00:10:34,860 chiso 157 00:10:34,860 --> 00:10:38,419 de alumnos 158 00:10:38,419 --> 00:10:43,120 vamos a ver si hace algo 159 00:10:43,120 --> 00:10:46,279 pongo el alumno A 160 00:10:46,279 --> 00:10:51,830 y me ha añadido el alumno A 161 00:10:51,830 --> 00:10:55,110 pongo el alumno B 162 00:10:55,110 --> 00:10:58,740 y me ha añadido también B 163 00:10:58,740 --> 00:11:01,960 fijaos que ahora mismo 164 00:11:01,960 --> 00:11:03,740 el orden 165 00:11:03,740 --> 00:11:07,389 no lo garantiza 166 00:11:07,389 --> 00:11:09,570 ¿vale? 167 00:11:10,330 --> 00:11:11,669 entonces aquí 168 00:11:11,669 --> 00:11:13,629 habrá que ver qué hacemos 169 00:11:13,629 --> 00:11:15,610 a la hora de 170 00:11:15,610 --> 00:11:20,440 ¿qué? de recargarlo 171 00:11:20,440 --> 00:11:28,139 De cuando cargo los ficheros, los alumnos. 172 00:11:28,500 --> 00:11:34,740 Porque ayer los alumnos se guardaban ordenados y se escribían en el fichero ordenados. 173 00:11:35,299 --> 00:11:36,100 Vale, perfecto. 174 00:11:36,139 --> 00:11:40,000 Entonces cuando lo recargaba no tenía que hacer nada con el identificador 175 00:11:40,000 --> 00:11:43,120 porque venían ordenados con el identificador correcto. 176 00:11:43,480 --> 00:11:44,259 Entonces, perfecto. 177 00:11:44,320 --> 00:11:45,620 Pero ahora no lo sé. 178 00:11:46,059 --> 00:11:49,000 Porque si os fijáis, ya me los ha mezclado. 179 00:11:51,759 --> 00:11:54,559 Lo escribiera con este orden de aquí 180 00:11:54,559 --> 00:11:56,340 Cuando lo recargo 181 00:11:56,340 --> 00:11:58,480 Si voy pillando del primero al último 182 00:11:58,480 --> 00:12:00,840 Este de aquí se me transformaría 183 00:12:00,840 --> 00:12:01,860 En el alumno cero 184 00:12:01,860 --> 00:12:03,720 Este en el uno y este en el dos 185 00:12:03,720 --> 00:12:06,659 Entonces tendré que tener cuidado 186 00:12:06,659 --> 00:12:07,159 Con esto 187 00:12:07,159 --> 00:12:10,139 Tendré que hacer algo con esto 188 00:12:10,139 --> 00:12:11,519 ¿Qué hago con esto? 189 00:12:15,490 --> 00:12:17,889 Punto short no, punto short a lo mejor 190 00:12:17,889 --> 00:12:20,070 Punto short 191 00:12:20,070 --> 00:12:21,450 Es corto 192 00:12:21,450 --> 00:12:22,690 Short es 193 00:12:22,690 --> 00:12:25,899 Short 194 00:12:25,899 --> 00:12:27,440 short, short, short 195 00:12:27,440 --> 00:12:29,179 short no, short 196 00:12:29,179 --> 00:12:32,879 ¿qué hago? 197 00:12:41,740 --> 00:12:42,159 ¿qué hago? 198 00:12:42,559 --> 00:13:02,809 comparable, vale 199 00:13:02,809 --> 00:13:04,350 ¿qué hago? 200 00:13:17,870 --> 00:13:19,090 alumno A 201 00:13:19,090 --> 00:13:21,669 es igual a alumno 202 00:13:21,669 --> 00:13:25,980 ahí 203 00:13:25,980 --> 00:13:28,200 aprenderé a escribir uno de estos años 204 00:13:28,200 --> 00:13:28,740 O 205 00:13:28,740 --> 00:13:31,919 porque esto tiene que ser un alumno 206 00:13:31,919 --> 00:13:33,659 ¿sí? 207 00:13:34,279 --> 00:13:36,220 y si no es, que explote 208 00:13:36,220 --> 00:13:37,799 ¿sí? 209 00:13:38,240 --> 00:13:39,179 ¿Y ahora qué hago? 210 00:13:45,450 --> 00:13:48,970 O punto id menos a punto id. 211 00:13:52,899 --> 00:13:53,740 Bueno, dis. 212 00:13:55,559 --> 00:13:56,080 A. 213 00:13:57,159 --> 00:13:58,700 Me he equivocado seis veces. 214 00:13:59,100 --> 00:14:01,039 Dis aquí y a aquí. 215 00:14:01,559 --> 00:14:01,820 Ahora sí. 216 00:14:04,980 --> 00:14:07,299 Esto ordenado es por id. 217 00:14:07,639 --> 00:14:13,559 Ahora, la duda que tengo es a ver si me lo ordena al revés, del último al primero, pero creo que no. 218 00:14:14,159 --> 00:14:17,779 O sea, en teoría, si este es el alumno 0 y este es el alumno 3, 219 00:14:17,779 --> 00:14:19,919 Me hará 3 menos 0 220 00:14:19,919 --> 00:14:22,740 Y por lo tanto me dirá que esto es mayor que esto 221 00:14:22,740 --> 00:14:23,779 O sea que no 222 00:14:23,779 --> 00:14:25,100 Debería ser al revés 223 00:14:25,100 --> 00:14:28,340 Luego lo probamos y si sale al revés 224 00:14:28,340 --> 00:14:29,899 Lo cambiamos 225 00:14:29,899 --> 00:14:32,639 Si ahora esto es 0 226 00:14:32,639 --> 00:14:33,720 Y esto es 3 227 00:14:33,720 --> 00:14:35,000 Sale un número negativo 228 00:14:35,000 --> 00:14:38,519 Entonces me está diciendo que this viene antes que este 229 00:14:38,519 --> 00:14:41,139 O sea que este debería ser correcto 230 00:14:41,139 --> 00:14:42,580 Si son el mismo y de 231 00:14:42,580 --> 00:14:43,600 Me dará 0 232 00:14:43,600 --> 00:14:46,919 Si son este aquí es 3 y este es 0 233 00:14:46,919 --> 00:14:49,179 pues me dirá que 3 viene antes de 0 234 00:14:49,179 --> 00:14:50,240 porque me da un número positivo 235 00:14:50,240 --> 00:14:52,179 ¿os acordáis como funciona el compare? 236 00:14:53,480 --> 00:14:55,360 no, pues miradlo 237 00:14:55,360 --> 00:14:56,440 ¿sí? 238 00:14:57,039 --> 00:14:59,179 entonces con esto en teoría 239 00:14:59,179 --> 00:15:01,100 ya se pueden comparar 240 00:15:01,100 --> 00:15:02,919 y se pueden organizar 241 00:15:02,919 --> 00:15:32,500 ¿qué hago? vamos a ver 242 00:15:32,500 --> 00:15:48,970 sí, pues ahora 243 00:15:48,970 --> 00:15:50,830 me lo está poniendo bonitos 244 00:15:50,830 --> 00:15:52,269 organizados 245 00:15:52,269 --> 00:15:52,929 ¿vale? 246 00:15:57,120 --> 00:15:59,399 puede que esto no sea 247 00:15:59,399 --> 00:16:01,240 la forma más guay de hacerlo 248 00:16:01,240 --> 00:16:03,279 yo aquí estoy creando 249 00:16:03,279 --> 00:16:05,200 como los voy dando ordenados 250 00:16:05,200 --> 00:16:07,399 estoy creando un tree 251 00:16:07,399 --> 00:16:09,220 que en realidad no es un árbol 252 00:16:09,220 --> 00:16:11,320 en realidad está yendo todo a la derecha 253 00:16:11,320 --> 00:16:12,960 ¿sí? 254 00:16:13,299 --> 00:16:15,320 porque le pongo el 0, lo pongo aquí 255 00:16:15,320 --> 00:16:17,500 le pongo el 1, oh está a la derecha, le pongo el 2 256 00:16:17,500 --> 00:16:19,480 oh está a la derecha del 0, está a la derecha 257 00:16:19,480 --> 00:16:21,480 del 1, oh le pongo el 3, está a la derecha 258 00:16:21,480 --> 00:16:23,279 del 0, está a la derecha del 1, está a la derecha 259 00:16:23,279 --> 00:16:25,259 del 2, entonces sostancialmente 260 00:16:25,259 --> 00:16:26,720 me está saliendo una relist 261 00:16:26,720 --> 00:16:32,440 ¿sí? pero es una 262 00:16:32,440 --> 00:16:40,779 opción para lograr esto la otra opción es dejarlo con asset y luego hacer un short pero no sé cuánto 263 00:16:40,779 --> 00:16:48,879 gano cada vez que añado uno a hacer un reorganización de todo el asset es útil y es 264 00:16:48,879 --> 00:16:56,559 rápido cuando no te interesa la el orden pero si cada vez tu idea no me interesa el orden pero 265 00:16:56,559 --> 00:17:04,160 ordena melo cada vez que pongo algo pues entonces las 7 también es la cosa más interesante si me 266 00:17:04,160 --> 00:17:08,740 interesa el orden pues entonces tengo el tricet que me garantiza el orden garantiza que me lo 267 00:17:08,740 --> 00:17:19,000 estaba ordenando es una opción la otra opción que nos queda es hacer el asset modificar el alumno 268 00:17:19,000 --> 00:17:28,400 para que haya, por un lado, el constructor este de aquí, que me da el identificador definitivo, 269 00:17:28,519 --> 00:17:35,099 y otro constructor donde acepto yo el identificador, pero me expongo a que luego haya problemas con los identificadores. 270 00:17:38,839 --> 00:17:40,700 Entonces, es peligroso. 271 00:17:41,319 --> 00:17:45,759 O sea, que alguien me meta el alumno 500 sin haber hecho el 499, 272 00:17:45,759 --> 00:17:50,599 y que entonces se quede allí un código que no existe. 273 00:17:50,700 --> 00:18:29,400 Y no lo sé, ¿vale? Por lo tanto, prefiero dejar esto que se haga así y organizar esto de esta forma. Vale, perfecto. Entonces, ahora lo que hemos hecho es, sí, tú ayer no estabas, ¿verdad? Haber estado ayer. 274 00:18:29,400 --> 00:18:32,180 pues empieza desde cero 275 00:18:32,180 --> 00:18:34,980 pero como tú nada más encenderlo 276 00:18:34,980 --> 00:18:36,700 vas a cargar 277 00:18:36,700 --> 00:18:38,740 los ficheros que tenías antes 278 00:18:38,740 --> 00:18:40,440 los alumnos que tenías antes 279 00:18:40,440 --> 00:18:42,720 pues técnicamente lo que estás haciendo 280 00:18:42,720 --> 00:18:43,180 es 281 00:18:43,180 --> 00:18:47,000 como se dice, creas el primero 282 00:18:47,000 --> 00:18:48,619 y le darás cero, creas el segundo 283 00:18:48,619 --> 00:18:49,960 y le darás uno y entonces 284 00:18:49,960 --> 00:18:52,579 tu aplicación llegará a un momento que has creado 285 00:18:52,579 --> 00:18:54,339 los, has dicho catorce 286 00:18:54,339 --> 00:18:56,500 antes y entonces el próximo 287 00:18:56,500 --> 00:18:58,880 que crearás será el conidentificador catorce 288 00:18:58,880 --> 00:19:01,319 funcionaba, ¿vale? 289 00:19:01,920 --> 00:19:03,380 hoy es un poquito más complejo 290 00:19:03,380 --> 00:19:05,259 porque tenemos dos aplicaciones distintas 291 00:19:05,259 --> 00:19:06,880 entonces habrá que ver qué hacemos 292 00:19:06,880 --> 00:19:11,349 pero, por ahora 293 00:19:11,349 --> 00:19:13,750 felices 294 00:19:13,750 --> 00:19:14,650 ¿sí? 295 00:19:17,230 --> 00:19:18,349 es un problema 296 00:19:18,349 --> 00:19:18,710 para 297 00:19:18,710 --> 00:19:21,369 los alumnos de la 298 00:19:21,369 --> 00:19:23,650 del después de recreo 299 00:19:23,650 --> 00:19:25,329 probablemente, ¿sí? 300 00:19:26,690 --> 00:19:27,890 entonces, ahora 301 00:19:27,890 --> 00:19:29,809 nos queda esto de decir, vale 302 00:19:29,809 --> 00:19:36,890 esto funciona todo pero no hemos usado todavía los ficheros ahora queremos guardar esto en un 303 00:19:36,890 --> 00:19:41,990 archivo vale fenomenal entonces para guardar esto en un archivo tenemos que en un determinado 304 00:19:41,990 --> 00:19:48,529 momento guardar una opción meto un botón aquí de pincho aquí el guardo pero hemos dicho intentamos 305 00:19:48,529 --> 00:19:52,170 hacerlo de otra forma cuando yo he usado esta aplicación ya he creado lo que sea pues 306 00:19:52,170 --> 00:19:58,549 simplemente la cierro y que él me lo guarde vale vamos a ver si conseguimos encontrar una forma de 307 00:19:58,549 --> 00:20:15,349 hacer esto window closing aquí tengo un par de eventos que me pueden ser 308 00:20:15,349 --> 00:20:21,829 útil que son cuando la ventana se está cerrando o cuando las ventanas está 309 00:20:21,829 --> 00:20:33,069 cerrada vale entonces vamos a poner esto cuando la ventana ya está cerrada pues haz algo y lo 310 00:20:33,069 --> 00:20:44,000 que hagamos es si eso adiós primera cosa es antes de desarrollar aquí el código miro si 311 00:20:44,000 --> 00:20:52,579 efectivamente me funciona vale lo lanzo añado lo que tengo añadir ahora le doy a cerrar pues aquí 312 00:20:52,579 --> 00:20:54,619 no me escribe adiós, ¿vale? 313 00:20:54,839 --> 00:20:56,599 Por lo tanto, no me 314 00:20:56,599 --> 00:20:58,359 vale como opción. 315 00:20:59,640 --> 00:20:59,759 ¿Sí? 316 00:21:00,680 --> 00:21:01,960 Entonces esto lo puedo quitar. 317 00:21:02,859 --> 00:21:04,660 Esto lo ha metido sobre frame. 318 00:21:07,319 --> 00:21:08,660 Este de aquí, por alguna 319 00:21:08,660 --> 00:21:10,559 razón, no me está valiendo. 320 00:21:10,680 --> 00:21:11,960 ¿Vale? Probamos el otro. 321 00:21:13,539 --> 00:21:14,319 Probamos el window 322 00:21:14,319 --> 00:21:14,839 closing. 323 00:21:16,059 --> 00:21:16,220 Sí. 324 00:21:23,559 --> 00:21:25,039 Window closing. 325 00:21:26,220 --> 00:21:27,039 Venga. Mientras 326 00:21:27,039 --> 00:21:39,960 se está cerrando que vea algo y lo probamos añado lo cierro pues ahora me ha escrito algo pues esto 327 00:21:39,960 --> 00:21:47,339 me vale sí o los pruebas y o si no hago como hacen las personas humanas vale que es lo busco 328 00:21:47,339 --> 00:21:54,359 internet en internet busco hoy quiero hacer un evento cuando se está cerrando la cosa donde lo 329 00:21:54,359 --> 00:21:59,319 pongo y allí o viendo así que closet de no me ha funcionado el closing no me ha 330 00:21:59,319 --> 00:22:04,619 funcionado abro chat gpt y le pregunto qué diferencia hay entre el evento 331 00:22:04,619 --> 00:22:09,619 closing el evento a closet y él me lo explica y luego le digo mira estoy 332 00:22:09,619 --> 00:22:13,799 intentando hacer esto pero si lo pongo en closet no aparece inclusive porque y 333 00:22:13,799 --> 00:22:19,740 él me lo explica vale esto es el uso bueno de la inteligencia artificial 334 00:22:19,740 --> 00:22:23,119 No, hazme código. Eso es feo. 335 00:22:24,140 --> 00:22:29,640 Aún si parece ser que alguien ha dicho, el jefe de ChagPT, 336 00:22:30,279 --> 00:22:34,779 hoy ha dicho que en un par de años ya seréis inútiles. 337 00:22:53,029 --> 00:23:02,089 Sigo. Vale, entonces, hemos encontrado el evento que hace algo cuando se apaga. 338 00:23:02,089 --> 00:23:05,410 Vale, entonces, en este evento de aquí, que ahora no me acuerdo dónde está. 339 00:23:05,410 --> 00:23:11,049 closing 340 00:23:11,049 --> 00:23:14,069 ¿vale? vamos a hacer 341 00:23:14,069 --> 00:23:15,809 lo que queremos hacer, que es al 342 00:23:15,809 --> 00:23:17,930 cerrarse, antes de cerrarse 343 00:23:17,930 --> 00:23:19,630 pues intenta escribir en un fichero 344 00:23:19,630 --> 00:23:21,809 entonces creamos nosotros un fichero 345 00:23:21,809 --> 00:23:23,829 por ahí, ¿vale? entonces file 346 00:23:23,829 --> 00:23:25,950 f es igual a new 347 00:23:25,950 --> 00:23:27,410 file de 348 00:23:27,410 --> 00:23:30,450 objetos 349 00:23:30,450 --> 00:23:34,589 .txt 350 00:23:34,589 --> 00:23:36,529 fijaos, nos hará un texto 351 00:23:36,529 --> 00:23:38,210 pero si le pongo .txt 352 00:23:38,210 --> 00:23:40,170 luego lo puedo abrir fácilmente con el block 353 00:23:40,170 --> 00:23:57,579 notes en realidad para ser más bonito así vale o gato aquí se enfada porque no tengo file aquí 354 00:23:57,579 --> 00:24:11,359 podía preguntarme si existe ya o no pero ya lo hace él me creó un object output 3 am os vale 355 00:24:11,359 --> 00:24:13,400 esto también siempre en vuestro programa 356 00:24:13,400 --> 00:24:15,319 se llamará os, desde ahora 357 00:24:15,319 --> 00:24:16,480 para siempre, es new 358 00:24:16,480 --> 00:24:17,880 object 359 00:24:17,880 --> 00:24:21,640 output 360 00:24:21,640 --> 00:24:23,380 stream 361 00:24:23,380 --> 00:24:25,339 si, si, soy todos fanáticos 362 00:24:25,339 --> 00:24:25,660 del 363 00:24:25,660 --> 00:24:28,279 karate veo 364 00:24:28,279 --> 00:24:33,440 aquí le tengo que poner un new 365 00:24:33,440 --> 00:24:35,900 file output 366 00:24:35,900 --> 00:24:39,119 stream 367 00:24:39,119 --> 00:24:41,579 supongo, df 368 00:24:41,579 --> 00:24:45,029 este de aquí 369 00:24:45,029 --> 00:24:47,569 lo cargo, este de aquí 370 00:24:47,569 --> 00:24:49,029 lo pongo en un 371 00:24:49,029 --> 00:24:49,890 try-catch 372 00:24:49,890 --> 00:24:55,509 y ya está 373 00:24:55,509 --> 00:24:57,609 entonces 374 00:24:57,609 --> 00:24:59,109 si esto funciona 375 00:24:59,109 --> 00:25:01,690 ahora puedo escribir mis objetos 376 00:25:01,690 --> 00:25:02,990 ¿qué hago? 377 00:25:03,529 --> 00:25:05,410 pues recorro mi set 378 00:25:05,410 --> 00:25:07,890 ¿vale? y voy escribiendo 379 00:25:07,890 --> 00:25:10,150 los ficheros, ¿cómo recorro un set? 380 00:25:11,630 --> 00:25:12,890 set es alumnos 381 00:25:12,890 --> 00:25:15,890 alumnos.literator 382 00:25:17,170 --> 00:25:22,089 iterator 383 00:25:22,089 --> 00:25:24,049 de alumno 384 00:25:24,049 --> 00:25:27,539 it 385 00:25:27,539 --> 00:25:30,019 es igual a esta cosa aquí 386 00:25:30,019 --> 00:25:39,170 y ahora vile 387 00:25:39,170 --> 00:25:43,789 it.asnext 388 00:25:43,789 --> 00:25:49,200 os 389 00:25:49,200 --> 00:25:51,559 punto 390 00:25:51,559 --> 00:25:53,259 vrite 391 00:25:53,259 --> 00:25:54,339 object 392 00:25:54,339 --> 00:25:58,039 de it 393 00:25:58,039 --> 00:25:59,420 punto 394 00:25:59,420 --> 00:26:01,200 next 395 00:26:01,200 --> 00:26:08,210 esta cosa aquí me debería recorrer 396 00:26:08,210 --> 00:26:09,230 todos los objetos 397 00:26:09,230 --> 00:26:13,430 Pilla un objeto y lo escribe en mi fichero 398 00:26:13,430 --> 00:26:20,619 Entonces, si yo lanzo esto 399 00:26:20,619 --> 00:26:24,059 Escribo el señor A 400 00:26:24,059 --> 00:26:27,740 Escribo el señor B 401 00:26:27,740 --> 00:26:31,019 Escribo el señor C 402 00:26:31,019 --> 00:26:33,420 Y ahora lo cierro 403 00:26:33,420 --> 00:26:34,559 Explota 404 00:26:34,559 --> 00:26:42,119 ¿Por qué ha explotado? 405 00:26:45,059 --> 00:26:47,420 Efectivamente, ¿os acordáis que yo os he dicho 406 00:26:47,420 --> 00:26:58,880 Y mira, para poder guardar un objeto, para poder trabajar con los objetos, los objetos tienen que ser, o sea, para poder utilizar Object Output Stream, los objetos tienen que ser serializables. 407 00:26:59,319 --> 00:27:00,460 Y esto no es serializable. 408 00:27:01,740 --> 00:27:04,279 Este es comparable de alumno. 409 00:27:07,299 --> 00:27:08,960 Entonces, este es un alumno. 410 00:27:11,240 --> 00:27:14,640 Y entonces, esto... 411 00:27:14,640 --> 00:27:23,579 Pues entonces, aquí, además de implementar comparable, tengo que implementar también serializable. 412 00:27:23,579 --> 00:27:26,099 Y no puede hacerlo porque solo se puede implementar 413 00:27:26,099 --> 00:27:27,960 Una interfaz, ¿correcto? 414 00:27:28,400 --> 00:27:36,599 ¿Qué es que solo se puede hacer uno? 415 00:27:38,539 --> 00:27:39,099 Extender 416 00:27:39,099 --> 00:27:41,299 Solo puede heredar de una 417 00:27:41,299 --> 00:27:42,900 Pero puedo implementar cuanta me da la gana 418 00:27:42,900 --> 00:27:44,500 Por lo tanto, coma 419 00:27:44,500 --> 00:27:46,180 Serializable 420 00:27:46,180 --> 00:27:49,119 Él me pregunta, ¿qué es esto serializable? 421 00:27:49,779 --> 00:27:50,339 Impórtalo 422 00:27:50,339 --> 00:27:51,799 Vale, ya está 423 00:27:51,799 --> 00:27:53,599 Pues no tengo que hacer nada más 424 00:27:53,599 --> 00:27:55,980 Ahora eres serializable, fenomenal 425 00:27:55,980 --> 00:27:58,059 Entonces 426 00:27:58,059 --> 00:27:59,859 voy a buscar 427 00:27:59,859 --> 00:28:02,019 este de aquí 428 00:28:02,019 --> 00:28:04,019 que era permanencia objeto 429 00:28:04,019 --> 00:28:05,759 veis que el objeto me lo ha creado 430 00:28:05,759 --> 00:28:08,299 estará vacío, no, esta cosa rara 431 00:28:08,299 --> 00:28:09,640 ¿qué es esto? 432 00:28:09,839 --> 00:28:11,180 ni idea, fuera 433 00:28:11,180 --> 00:28:14,259 probablemente esta es la cabecera 434 00:28:14,259 --> 00:28:15,380 o algo por el estilo, ¿vale? 435 00:28:16,000 --> 00:28:18,019 vuelvo a rehacerlo, vamos a ver 436 00:28:18,019 --> 00:28:21,819 si funciona, hago el A 437 00:28:21,819 --> 00:28:24,059 hago el B 438 00:28:24,059 --> 00:28:26,819 hago el C 439 00:28:26,819 --> 00:28:31,680 y ahora cierro 440 00:28:31,680 --> 00:28:51,190 Ahora ya no explota. Si me voy al ficherito este de aquí, dentro me encuentro esta cosa aquí. ¿Qué es? Ni idea. No es inteligible para el ser humano. 441 00:28:51,190 --> 00:28:54,190 Bueno, veis que hay cosas que no son char, ¿vale? 442 00:28:54,430 --> 00:28:58,230 Ahora, algo, algo lo veo. 443 00:28:59,509 --> 00:29:01,029 Aquí debe de estar nombre por algún lado. 444 00:29:02,210 --> 00:29:07,890 Luego aquí está A, está B, está C. 445 00:29:08,589 --> 00:29:13,730 Pero si os fijáis, además de esto está cosas raras, que no entiendo. 446 00:29:14,829 --> 00:29:17,589 ¿Sí? Cuando esto se complica mucho, pues posiblemente no lo entiendo. 447 00:29:18,150 --> 00:29:18,670 ¿Sí? 448 00:29:18,670 --> 00:29:30,690 Esto es, son datos escritos como bytes, que luego he abierto con un fichero de texto, con un blog de notas, 449 00:29:31,170 --> 00:29:35,470 que entonces intenta pillarme los bytes y transformármelos en carácteres. 450 00:29:35,670 --> 00:29:41,069 Entonces, aquellos bytes que sí representan carácteres, pues lo consigo leer. 451 00:29:42,650 --> 00:29:48,589 Pero aquellos bytes que no son carácteres, pues salen cosas raras. 452 00:29:48,670 --> 00:29:54,420 ¿Sí? Entonces, esto no está pensado para que lo lea un ser humano 453 00:29:54,420 --> 00:30:02,369 ¿Ludas? Vale, entonces, tengo mis objetos guardados 454 00:30:02,369 --> 00:30:04,410 ¿Sí? Vale, fenomenal 455 00:30:04,410 --> 00:30:09,329 Ahora me hago una segunda aplicación, que es la que quiere importar las cosas 456 00:30:09,329 --> 00:30:14,289 ¿Vale? Entonces, en el... ¿Dónde está? ¿Dónde está? 457 00:30:15,289 --> 00:30:19,109 Objetos, permanencia, objetos, será esto, ¿no? 458 00:30:19,109 --> 00:30:21,329 Me crea un nuevo 459 00:30:21,329 --> 00:30:23,630 Aplicación 460 00:30:23,630 --> 00:30:26,640 Que sea 461 00:30:26,640 --> 00:30:27,819 App 2 462 00:30:27,819 --> 00:30:28,539 O App 463 00:30:28,539 --> 00:30:31,619 Show Data 464 00:30:31,619 --> 00:30:41,799 Esta será una nueva aplicación 465 00:30:41,799 --> 00:30:43,680 Donde aquí tendré que empezar 466 00:30:43,680 --> 00:30:45,079 A hacer todo, vale 467 00:30:45,079 --> 00:30:47,619 Lo que crearé es 468 00:30:47,619 --> 00:30:49,960 Un panel aquí en el medio 469 00:30:49,960 --> 00:30:52,099 Un botón 470 00:30:52,099 --> 00:30:53,140 A la derecha 471 00:30:53,140 --> 00:31:01,859 Un botón a la izquierda 472 00:31:01,859 --> 00:31:03,299 no, no, esto no lo quiero 473 00:31:03,299 --> 00:31:08,759 entonces, a ver, espera 474 00:31:08,759 --> 00:31:10,339 metamos antes los botones 475 00:31:10,339 --> 00:31:11,819 botón aquí 476 00:31:11,819 --> 00:31:14,839 otro botón aquí 477 00:31:14,839 --> 00:31:17,160 y en el medio 478 00:31:17,160 --> 00:31:18,859 quiero un panel 479 00:31:18,859 --> 00:31:22,660 en este panel 480 00:31:22,660 --> 00:31:24,420 quiero poner 481 00:31:24,420 --> 00:31:25,859 las 482 00:31:25,859 --> 00:31:27,700 campos de texto 483 00:31:27,700 --> 00:31:30,559 ah, pero espera, este panel 484 00:31:30,559 --> 00:31:33,299 tiene que ser 485 00:31:33,299 --> 00:31:35,259 absolute 486 00:31:35,259 --> 00:31:40,880 Esto va aquí 487 00:31:40,880 --> 00:31:42,079 Esto será el nombre 488 00:31:42,079 --> 00:31:46,950 Esto será el nombre 489 00:31:46,950 --> 00:31:51,279 Y este de aquí será 490 00:31:51,279 --> 00:31:56,299 El apellido 491 00:31:56,299 --> 00:31:58,599 Esto de aquí me permitirá 492 00:31:58,599 --> 00:31:59,940 Me permitirá moverse 493 00:31:59,940 --> 00:32:06,579 Este de aquí 494 00:32:06,579 --> 00:32:07,880 Lo pondré así 495 00:32:07,880 --> 00:32:10,559 Este de aquí lo pondré 496 00:32:10,559 --> 00:32:11,619 Así 497 00:32:11,619 --> 00:32:15,160 y estos tres 498 00:32:15,160 --> 00:32:19,740 mira que bonito 499 00:32:19,740 --> 00:32:22,359 terrible, pero 500 00:32:22,359 --> 00:32:23,039 vale 501 00:32:23,039 --> 00:32:27,079 entonces la idea es que ahora cuando me cargue 502 00:32:27,079 --> 00:32:29,099 cuando se cargue, cuando inicie 503 00:32:29,099 --> 00:32:30,900 este de aquí lo que haga es 504 00:32:30,900 --> 00:32:33,180 leer desde el fichero 505 00:32:33,180 --> 00:32:35,200 toda la información que tiene 506 00:32:35,200 --> 00:32:36,700 y luego empezar a ponerlas aquí 507 00:32:36,700 --> 00:32:39,160 por ahora antes de ponerme a hacer que funcione esto 508 00:32:39,160 --> 00:32:41,119 voy a hablar de los ficheros 509 00:32:41,119 --> 00:32:43,119 tengo que empezar y leerme las cosas 510 00:32:43,119 --> 00:32:44,799 del fichero, vale, entonces 511 00:32:44,799 --> 00:32:46,980 en la parte de inicialización 512 00:32:46,980 --> 00:32:48,900 cuando este hace init 513 00:32:48,900 --> 00:32:50,119 inicialize 514 00:32:50,119 --> 00:32:52,960 aquí voy a 515 00:32:52,960 --> 00:32:55,000 leer los datos, a cargarme los datos 516 00:32:55,000 --> 00:32:57,039 entonces lo que haré aquí 517 00:32:57,039 --> 00:32:58,299 es crearme 518 00:32:58,299 --> 00:33:00,579 un set también 519 00:33:00,579 --> 00:33:03,420 de alumno 520 00:33:03,420 --> 00:33:06,539 alumnos 521 00:33:06,539 --> 00:33:09,619 que es igual a new 522 00:33:09,619 --> 00:33:15,259 3 set de alumno 523 00:33:15,259 --> 00:33:19,920 como antes 524 00:33:19,920 --> 00:33:21,319 vale 525 00:33:21,319 --> 00:33:23,839 esto 526 00:33:23,839 --> 00:33:25,720 y esto 527 00:33:25,720 --> 00:33:28,700 y lo que intentaré hacer es que 528 00:33:28,700 --> 00:33:30,599 al hacer initialize me haga 529 00:33:30,599 --> 00:33:32,960 un cargar datos 530 00:33:32,960 --> 00:33:33,640 por ejemplo 531 00:33:33,640 --> 00:33:38,039 este programa de aquí 532 00:33:38,039 --> 00:33:41,400 lo que tiene que hacer 533 00:33:41,400 --> 00:33:43,720 este método es cargar los datos 534 00:33:43,720 --> 00:33:46,059 desde el fichero y mirarlos 535 00:33:46,059 --> 00:33:46,980 guardarlos 536 00:33:46,980 --> 00:33:49,920 en esta cosa 537 00:33:49,920 --> 00:33:50,859 aquí 538 00:33:50,859 --> 00:33:52,980 entonces, ¿qué hago aquí? 539 00:33:52,980 --> 00:33:57,720 object 540 00:33:57,720 --> 00:33:58,680 file 541 00:33:58,680 --> 00:33:59,420 file 542 00:33:59,420 --> 00:34:02,000 ff es igual a new 543 00:34:02,000 --> 00:34:02,960 file de 544 00:34:02,960 --> 00:34:05,039 objetos 545 00:34:05,039 --> 00:34:07,799 .txt 546 00:34:07,799 --> 00:34:08,440 lo hemos llamado 547 00:34:08,440 --> 00:34:09,579 no me acuerdo 548 00:34:09,579 --> 00:34:15,239 pillo el fichero 549 00:34:15,239 --> 00:34:16,659 aquí podría comprobar 550 00:34:16,659 --> 00:34:17,179 si existe 551 00:34:17,179 --> 00:34:17,840 venga lo hacemos 552 00:34:17,840 --> 00:34:24,659 no quiere 553 00:34:24,659 --> 00:34:26,340 no quiere 554 00:34:26,340 --> 00:34:32,170 o no está dentro de 555 00:34:32,170 --> 00:34:33,070 de otra cosa 556 00:34:33,070 --> 00:34:33,570 no lo sé 557 00:34:33,570 --> 00:34:34,449 import 558 00:34:34,449 --> 00:34:35,190 java 559 00:34:35,190 --> 00:34:36,530 .util 560 00:34:36,530 --> 00:34:37,329 . 561 00:34:37,329 --> 00:34:40,210 la fila 562 00:34:40,210 --> 00:34:41,530 o a java.io 563 00:34:41,530 --> 00:34:44,210 java.io 564 00:34:44,210 --> 00:34:47,659 input output 565 00:34:47,659 --> 00:34:50,480 aquí object 566 00:34:50,480 --> 00:34:52,420 o input 567 00:34:52,420 --> 00:34:53,840 stream 568 00:34:53,840 --> 00:34:55,119 ois 569 00:34:55,119 --> 00:34:58,800 es igual a new object 570 00:34:58,800 --> 00:35:02,920 input stream 571 00:35:02,920 --> 00:35:03,300 de 572 00:35:03,300 --> 00:35:04,880 new 573 00:35:04,880 --> 00:35:06,159 file 574 00:35:06,159 --> 00:35:08,920 input stream 575 00:35:08,920 --> 00:35:09,920 de f 576 00:35:09,920 --> 00:35:13,579 ahora no lo haces 577 00:35:13,579 --> 00:35:20,349 vale, esto se enfada 578 00:35:20,349 --> 00:35:21,590 tiene que estar en un track edge 579 00:35:21,590 --> 00:35:25,849 vale, y ahora 580 00:35:25,849 --> 00:35:28,030 lo que voy a hacer es 581 00:35:28,030 --> 00:35:29,429 leer objetos 582 00:35:29,429 --> 00:35:31,909 vale, paso número 583 00:35:31,909 --> 00:35:33,030 uno de prueba 584 00:35:33,030 --> 00:35:35,570 alumno 585 00:35:35,570 --> 00:35:37,889 a es igual 586 00:35:37,889 --> 00:35:39,809 a ois punto 587 00:35:39,809 --> 00:35:42,429 read object 588 00:35:42,429 --> 00:35:45,730 esto se enfada 589 00:35:45,730 --> 00:35:48,150 alumno 590 00:35:48,150 --> 00:35:50,920 se enfada 591 00:35:50,920 --> 00:35:55,280 add catch clause, vale 592 00:35:55,280 --> 00:35:57,920 me añade un class not found exception 593 00:35:57,920 --> 00:35:59,599 si, vale 594 00:35:59,599 --> 00:36:02,000 si, so 595 00:36:02,000 --> 00:36:03,360 ah 596 00:36:03,360 --> 00:36:09,000 vamos a ver si funciona 597 00:36:09,000 --> 00:36:11,639 veis que al cargarse 598 00:36:11,639 --> 00:36:13,400 me ha cargado el primer 599 00:36:13,400 --> 00:36:15,480 alumno 600 00:36:15,480 --> 00:36:17,800 vale, tenía tres alumnos 601 00:36:17,800 --> 00:36:28,320 allí, pam 602 00:36:28,320 --> 00:36:31,139 al cargarse, me ha cargado 603 00:36:31,139 --> 00:36:35,320 los tres alumnos. Pregunta, ¿qué pasa 604 00:36:35,320 --> 00:36:51,260 si leo una cuarta vez? Explosion. ¿Qué 605 00:36:51,260 --> 00:36:55,659 explosion es? End of file exception. 606 00:36:57,039 --> 00:36:59,300 ¿Vale? Entonces, esto puede ser 607 00:36:59,300 --> 00:37:02,960 dos opciones. O sé cuántos ficheros hay allí 608 00:37:02,960 --> 00:37:06,579 de alguna forma, cuántos objetos hay allí de alguna forma, 609 00:37:07,719 --> 00:37:11,079 o tendré que hacer algo 610 00:37:11,079 --> 00:37:13,119 para decir, oye, mira 611 00:37:13,119 --> 00:37:15,079 el 612 00:37:15,079 --> 00:37:16,059 como se dice 613 00:37:16,059 --> 00:37:19,400 cuando llegue 614 00:37:19,400 --> 00:37:20,639 un end of file exception 615 00:37:20,639 --> 00:37:23,059 recoge esta excepción y en vez de 616 00:37:23,059 --> 00:37:24,820 explotar, simplemente ha acabado 617 00:37:24,820 --> 00:37:26,699 la cosa 618 00:37:26,699 --> 00:37:45,030 como el available, por ejemplo 619 00:37:45,030 --> 00:37:48,980 return the number of bytes 620 00:37:48,980 --> 00:37:50,739 that can be read without blocking 621 00:37:50,739 --> 00:37:52,119 vamos a ver esto 622 00:37:52,119 --> 00:38:15,420 vamos a verlo aquí 623 00:38:15,420 --> 00:38:17,460 y vamos a verlo allí 624 00:38:17,460 --> 00:38:19,039 vamos, pem 625 00:38:19,039 --> 00:38:25,679 al principio me dice cero 626 00:38:25,679 --> 00:38:26,980 y aquí me dice cero 627 00:38:26,980 --> 00:38:28,699 entonces tampoco me sirve mucho 628 00:38:28,699 --> 00:38:30,860 en realidad aquí yo me esperaría más 629 00:38:30,860 --> 00:38:34,280 pero como me contesta siempre cero 630 00:38:34,280 --> 00:38:35,139 no 631 00:38:35,139 --> 00:38:37,119 esto no me vale 632 00:38:37,119 --> 00:38:39,579 porque si yo le pusiera un 633 00:38:39,579 --> 00:38:42,239 mientras los available no son cero 634 00:38:42,239 --> 00:38:43,219 pues no me entraría 635 00:38:43,219 --> 00:38:45,619 entonces esto no me vale 636 00:38:45,619 --> 00:38:47,039 vamos a ver si hay otros 637 00:38:47,039 --> 00:38:48,820 métodos de hoy 638 00:38:48,820 --> 00:38:51,440 que me puedan valer 639 00:38:51,440 --> 00:39:17,519 no lo veo, si 640 00:39:17,519 --> 00:39:24,239 es lo que he dicho antes, pero 641 00:39:24,239 --> 00:39:26,260 él me ha preguntado, no hay un método 642 00:39:26,260 --> 00:39:27,739 para no hacerlo con el try catch 643 00:39:27,739 --> 00:39:29,719 entonces estamos viendo si hay un método 644 00:39:29,719 --> 00:39:31,219 para no hacerlo en un package 645 00:39:31,219 --> 00:39:34,500 aquí, si no me equivoco 646 00:39:34,500 --> 00:39:35,639 lo hacía con available 647 00:39:35,639 --> 00:39:45,130 esta es lectura 648 00:39:45,130 --> 00:39:46,510 de objetos realizables 649 00:39:46,510 --> 00:39:48,489 aquí estaba utilizando el available 650 00:39:48,489 --> 00:39:50,949 pero lo hace no sobre el object 651 00:39:50,949 --> 00:39:52,309 más sobre el otro 652 00:39:52,309 --> 00:39:57,329 entonces, vamos a ver si funciona así 653 00:39:57,329 --> 00:40:08,940 esto es un file input stream 654 00:40:08,940 --> 00:40:12,519 file input 655 00:40:12,519 --> 00:40:13,860 stream 656 00:40:13,860 --> 00:40:17,000 fs 657 00:40:17,000 --> 00:40:19,280 es igual a esta cosa 658 00:40:19,280 --> 00:40:20,980 y aquí ponemos fs 659 00:40:20,980 --> 00:40:23,039 y esto hace con 660 00:40:23,039 --> 00:40:25,119 fs.available 661 00:40:25,119 --> 00:40:27,860 vamos a ver si fs.available 662 00:40:27,860 --> 00:40:30,260 me hace el juego 663 00:40:30,260 --> 00:40:31,159 ¡pem! 664 00:40:31,760 --> 00:40:32,460 explota 665 00:40:32,460 --> 00:40:39,300 veis que aquí si lee y aquí no 666 00:40:39,300 --> 00:40:41,659 me ignora 667 00:40:41,659 --> 00:40:43,179 Antes me hace la pregunta 668 00:40:43,179 --> 00:40:44,460 Y luego me ignora 669 00:40:44,460 --> 00:40:47,039 Alexander, hola 670 00:40:47,039 --> 00:40:49,019 Estoy contestando a tu pregunta 671 00:40:49,019 --> 00:40:52,940 Pero vosotros lo sabéis 672 00:40:52,940 --> 00:40:54,820 Jugáis, seguro 673 00:40:54,820 --> 00:40:57,599 En vez de utilizarlo 674 00:40:57,599 --> 00:40:59,260 Sobre el output stream 675 00:40:59,260 --> 00:41:01,340 Lo he utilizado sobre el file input stream 676 00:41:01,340 --> 00:41:02,420 Que es luego el que usa 677 00:41:02,420 --> 00:41:05,099 Entonces si te fijas, este sí me dice 678 00:41:05,099 --> 00:41:06,940 Que al principio hay 142 679 00:41:06,940 --> 00:41:08,659 Y cero 680 00:41:08,659 --> 00:41:11,300 Entonces tengo dos formas de hacerlo 681 00:41:11,300 --> 00:41:12,780 o hago un while 682 00:41:12,780 --> 00:41:14,539 esto.available 683 00:41:14,539 --> 00:41:17,159 no sea cero, o sea, mientras que hay 684 00:41:17,159 --> 00:41:19,539 todavía datos, sigue leyendo 685 00:41:19,539 --> 00:41:21,159 o la segunda opción 686 00:41:21,159 --> 00:41:23,239 es halo, halo, halo 687 00:41:23,239 --> 00:41:25,199 y cuando explotas con un endofile 688 00:41:25,199 --> 00:41:27,179 exception, pues me recupero 689 00:41:27,179 --> 00:41:28,920 y digo, has acabado el fichero y sigue adelante 690 00:41:28,920 --> 00:41:37,570 una de las dos, lo puedes hacer tú 691 00:41:37,570 --> 00:41:38,869 lo lees una vez 692 00:41:38,869 --> 00:41:41,489 cuantos objetos hay, explotas y luego 693 00:41:41,489 --> 00:41:43,090 pero, si 694 00:41:43,090 --> 00:41:49,210 esto es otra cuestión 695 00:41:49,210 --> 00:41:51,710 que, pero 696 00:41:51,710 --> 00:41:52,469 vamos después 697 00:41:52,469 --> 00:41:56,849 es una buena observación 698 00:41:56,849 --> 00:41:58,730 es decir, vale, mas si yo necesito saber 699 00:41:58,730 --> 00:42:00,210 cuantos objetos hay 700 00:42:00,210 --> 00:42:02,349 pues lo que puedo hacer es escribirlo 701 00:42:02,349 --> 00:42:03,670 hacer que 702 00:42:03,670 --> 00:42:07,349 el primer elemento que guardo 703 00:42:07,349 --> 00:42:08,969 no sean objetos 704 00:42:08,969 --> 00:42:11,750 sino sea cuantos objetos voy a guardar 705 00:42:11,750 --> 00:42:13,389 de esta forma cuando voy a leer 706 00:42:13,389 --> 00:42:14,809 la primera cosa que leo 707 00:42:14,809 --> 00:42:17,269 no es un objeto, mas es cuantos objetos 708 00:42:17,269 --> 00:42:18,650 están guardados en este fichero 709 00:42:18,650 --> 00:42:21,210 y luego sé que tengo que leer 14 objetos 710 00:42:21,210 --> 00:42:22,090 son 20 objetos 711 00:42:22,090 --> 00:42:25,250 make sense, lo hacemos después por otra 712 00:42:25,250 --> 00:42:25,590 razón 713 00:42:25,590 --> 00:42:29,150 vale, entonces, esto hemos dicho que 714 00:42:29,150 --> 00:42:31,130 funciona, pues entonces mejoro 715 00:42:31,130 --> 00:42:33,150 un poquito esta cosa de aquí y hago 716 00:42:33,150 --> 00:42:34,030 un vile 717 00:42:34,030 --> 00:42:37,150 fees.available 718 00:42:37,809 --> 00:42:39,150 available 719 00:42:39,750 --> 00:42:41,150 available 720 00:42:41,150 --> 00:42:43,449 no es 0 721 00:42:43,449 --> 00:42:46,269 ¿qué hago? 722 00:42:46,269 --> 00:42:51,230 alumnos.add 723 00:42:51,230 --> 00:42:52,869 de 724 00:42:52,869 --> 00:42:54,369 esto 725 00:42:54,369 --> 00:43:06,750 he borrado también el oís 726 00:43:06,750 --> 00:43:12,139 object 727 00:43:12,139 --> 00:43:14,380 output 728 00:43:14,380 --> 00:43:16,539 stream oís 729 00:43:16,539 --> 00:43:19,059 es igual a new object 730 00:43:19,059 --> 00:43:20,780 output 731 00:43:20,780 --> 00:43:22,260 stream 732 00:43:22,260 --> 00:43:23,840 stream 733 00:43:23,840 --> 00:43:25,119 de fiss 734 00:43:25,119 --> 00:43:29,550 input 735 00:43:29,550 --> 00:43:31,750 input 736 00:43:31,750 --> 00:43:39,719 Entonces, ahora tenemos este mecanismo aquí 737 00:43:39,719 --> 00:43:40,960 Que lo que hace es guardar método 738 00:43:40,960 --> 00:43:42,760 Cuando he hecho todo este while 739 00:43:42,760 --> 00:43:45,900 Si hizo alumnos 740 00:43:45,900 --> 00:43:48,139 Vamos a ver 741 00:43:48,139 --> 00:43:49,619 Lanzo esto 742 00:43:49,619 --> 00:43:53,099 Y veis que me ha guardado los alumnos 743 00:43:53,099 --> 00:43:54,880 ¿Vale? 744 00:43:55,880 --> 00:43:56,320 O sea que 745 00:43:56,320 --> 00:43:58,460 Técnicamente no ha explotado 746 00:43:58,460 --> 00:43:59,579 Está bien 747 00:43:59,579 --> 00:44:01,519 Ha cargado todos los alumnos 748 00:44:01,519 --> 00:44:03,599 Con sus cosas, etc, etc 749 00:44:03,599 --> 00:44:26,659 Entonces, ahora lo que puedo hacer, después de haber hecho el cargar datos, es cargar el primer elemento, este de aquí, entonces, ¿qué hago? Me lo guardo, lo hago aquí. 750 00:44:26,659 --> 00:44:28,679 Cuando hagas el cargar dato 751 00:44:28,679 --> 00:44:31,219 Cuando acarga el primer 752 00:44:31,219 --> 00:44:33,900 Elemento 753 00:44:33,900 --> 00:44:37,139 Bolean 754 00:44:37,139 --> 00:44:39,320 Primero 755 00:44:39,320 --> 00:44:41,460 Es igual a uno 756 00:44:41,460 --> 00:44:43,000 Igual a true 757 00:44:43,000 --> 00:44:47,550 Primero 758 00:44:47,550 --> 00:44:49,969 Es igual a false 759 00:44:49,969 --> 00:44:52,849 Y lo que hace es 760 00:44:52,849 --> 00:44:54,550 Si 761 00:44:54,550 --> 00:44:58,829 Primero 762 00:44:58,829 --> 00:45:01,510 Hago algo 763 00:45:01,510 --> 00:45:02,530 Si no 764 00:45:02,530 --> 00:45:04,789 hago esta cosa aquí 765 00:45:04,789 --> 00:45:11,429 si es la primera vez, si es el primero 766 00:45:11,429 --> 00:45:14,269 lo que hago es leerlo 767 00:45:14,269 --> 00:45:21,250 alumno a es igual a esta cosa aquí 768 00:45:21,250 --> 00:45:25,630 luego lo puedo añadir 769 00:45:25,630 --> 00:45:30,130 alumnos.add a 770 00:45:30,130 --> 00:45:35,650 y lo que quiero hacer es escribir los datos de este alumno 771 00:45:35,650 --> 00:45:37,110 en los campos 772 00:45:37,110 --> 00:45:38,630 que no me acuerdo como he llamado 773 00:45:38,630 --> 00:45:41,429 no los he llamado, por lo tanto vamos a llamarlos 774 00:45:41,429 --> 00:46:06,429 Este de aquí lo llamamos txt1, esto lo llamamos txtn de nombre, este de aquí lo llamamos id y este de aquí lo llamamos a, txta, vuelvo aquí, está abajo. 775 00:46:06,429 --> 00:46:45,480 Entonces, lo que hace es guardar en txt.id.setText de a.id, txt.nombre.setText de a.nombre, 776 00:46:45,480 --> 00:46:48,420 txt 777 00:46:48,420 --> 00:46:50,320 de apellido 778 00:46:50,320 --> 00:46:52,119 punto set text 779 00:46:52,119 --> 00:46:54,539 de a punto 780 00:46:54,539 --> 00:46:56,139 apellido 781 00:46:56,139 --> 00:47:00,739 entonces ahora cuando lo lanzo 782 00:47:00,739 --> 00:47:01,679 explota 783 00:47:01,679 --> 00:47:07,949 null pointer exception 784 00:47:07,949 --> 00:47:11,199 ah porque lo he hecho 785 00:47:11,199 --> 00:47:23,400 el que 786 00:47:23,400 --> 00:47:26,320 si son azules si 787 00:47:26,320 --> 00:47:32,099 event dispatch 788 00:47:32,099 --> 00:47:33,239 event queue 789 00:47:33,239 --> 00:47:35,860 access control 790 00:47:35,860 --> 00:47:36,980 donde esta 791 00:47:36,980 --> 00:47:39,539 donde está app.showData 792 00:47:39,539 --> 00:47:40,679 app.showData 793 00:47:40,679 --> 00:47:43,119 inicialice cargar datos, el error es 794 00:47:43,119 --> 00:47:43,659 aquí 795 00:47:43,659 --> 00:47:45,940 app.id 796 00:47:45,940 --> 00:47:48,159 se me enfada, ¿por qué? 797 00:48:08,289 --> 00:48:09,710 tatara tatara 798 00:48:09,710 --> 00:48:43,369 olé, ¿por qué se me enfada? 799 00:48:49,769 --> 00:48:50,869 vamos a intentar 800 00:48:50,869 --> 00:48:52,869 entender por qué se 801 00:48:52,869 --> 00:48:53,889 enfada 802 00:48:53,889 --> 00:48:56,650 ¿queréis ir a la? 803 00:48:57,510 --> 00:48:58,949 vale, el error que daba antes 804 00:48:58,949 --> 00:49:00,750 es porque yo llamaba el 805 00:49:00,750 --> 00:49:02,429 método este de aquí 806 00:49:02,429 --> 00:49:04,170 de cargar datos 807 00:49:04,170 --> 00:49:06,610 lo llamaba en vez que aquí 808 00:49:06,610 --> 00:49:08,170 abajo, lo llamaba aquí 809 00:49:08,170 --> 00:49:10,329 y como se llama aquí 810 00:49:10,329 --> 00:49:12,789 y todavía no ha inicializado 811 00:49:12,789 --> 00:49:14,389 los text fields 812 00:49:14,389 --> 00:49:16,130 pues esto era null 813 00:49:16,130 --> 00:49:18,449 entonces intentaba acceder a ese null y decía 814 00:49:18,449 --> 00:49:20,469 que no había nada, entonces he movido 815 00:49:20,469 --> 00:49:22,510 la llamada del cargar datos aquí 816 00:49:22,510 --> 00:49:24,809 abajo y ahora cuando lo lanzo 817 00:49:24,809 --> 00:49:28,679 funciona, me pone 818 00:49:28,679 --> 00:49:30,579 el primero, ahora tengo que hacer los 819 00:49:30,579 --> 00:49:32,599 botones, pero esto ya no es 820 00:49:32,599 --> 00:49:37,000 ficheros, por ahora está cargando 821 00:49:37,000 --> 00:49:40,039 todo, está cargando todos los 822 00:49:40,039 --> 00:49:42,599 objetos, están ya cargadas aquí 823 00:49:42,599 --> 00:49:46,099 y está cargando el primer 824 00:49:46,099 --> 00:49:47,780 objeto en el visor 825 00:49:47,780 --> 00:49:55,559 si queréis 826 00:49:55,559 --> 00:49:58,400 por completar, hagamos los botones 827 00:49:58,400 --> 00:50:01,019 cuando le doy al botón derecho 828 00:50:01,019 --> 00:50:03,360 lo que tiene que hacer 829 00:50:03,360 --> 00:50:06,219 es pillar el siguiente 830 00:50:06,219 --> 00:50:09,179 para eso tendré que tener 831 00:50:09,179 --> 00:50:13,019 son ordenados 832 00:50:13,019 --> 00:50:13,519 pues 833 00:50:13,519 --> 00:50:16,599 pongo por algún lado el id actual 834 00:50:16,599 --> 00:50:16,960 vale 835 00:50:16,960 --> 00:50:20,900 int id actual 836 00:50:20,900 --> 00:50:22,659 es igual a 0 837 00:50:22,659 --> 00:50:28,219 entonces al hacer 838 00:50:28,219 --> 00:50:29,659 clic allí 839 00:50:29,659 --> 00:50:31,000 es este no 840 00:50:31,000 --> 00:50:33,619 es este 841 00:50:33,619 --> 00:50:36,119 pues lo que hace 842 00:50:36,119 --> 00:50:37,940 es idea actual 843 00:50:37,940 --> 00:50:39,679 más más 844 00:50:39,679 --> 00:50:44,480 y ahora tiene que buscar 845 00:50:44,480 --> 00:50:46,000 dentro del set 846 00:50:46,000 --> 00:50:47,920 el ordenador 847 00:50:47,920 --> 00:50:51,039 el alumno 848 00:50:51,039 --> 00:50:52,280 que tenga esta idea 849 00:50:52,280 --> 00:50:53,800 y pillarlo 850 00:50:53,800 --> 00:50:55,519 ¿si? 851 00:50:56,079 --> 00:50:58,119 una forma de hacerlo 852 00:50:58,119 --> 00:51:00,880 teniendo en cuenta que si esto se pasa 853 00:51:00,880 --> 00:51:02,599 debería volver a cero 854 00:51:02,599 --> 00:51:04,960 entonces me pregunto que si 855 00:51:04,960 --> 00:51:07,159 idea actual 856 00:51:07,159 --> 00:51:08,820 es igual 857 00:51:08,820 --> 00:51:10,719 a alumnos 858 00:51:10,719 --> 00:51:14,510 .sice 859 00:51:14,510 --> 00:51:20,429 pues entonces id actual 860 00:51:20,429 --> 00:51:22,829 es igual a cero 861 00:51:22,829 --> 00:51:26,409 ¿sí? 862 00:51:26,829 --> 00:51:29,349 y ahora lo que voy a hacer es 863 00:51:29,349 --> 00:51:31,610 voy a hacer con un método o algo por el estilo 864 00:51:31,610 --> 00:51:32,949 de actualizar 865 00:51:32,949 --> 00:51:36,510 id actual 866 00:51:36,510 --> 00:51:41,280 ¿qué hace esto? 867 00:51:41,940 --> 00:51:55,360 esto si lo pongo fuera me funciona 868 00:51:55,360 --> 00:52:01,139 vamos a ponerlo aquí al azar 869 00:52:01,139 --> 00:52:02,619 esto me lo llama 870 00:52:02,619 --> 00:52:05,880 entonces si llama 871 00:52:05,880 --> 00:52:06,940 este método de aquí 872 00:52:06,940 --> 00:52:10,559 y actualizar lo que tiene que hacer 873 00:52:10,559 --> 00:52:12,000 es sostancialmente 874 00:52:12,000 --> 00:52:14,599 buscar el alumno correcto 875 00:52:14,599 --> 00:52:16,760 y una vez que ha pillado 876 00:52:16,760 --> 00:52:18,280 el alumno correcto 877 00:52:18,280 --> 00:52:20,639 pues cambiar los datos 878 00:52:20,639 --> 00:52:21,260 en la 879 00:52:21,260 --> 00:52:23,139 en la 880 00:52:23,139 --> 00:52:25,900 en los tres campos, vale 881 00:52:25,900 --> 00:52:27,280 entonces 882 00:52:27,280 --> 00:52:29,860 hacemos con un iterador 883 00:52:29,860 --> 00:52:33,800 si esto fuera en vez que un set 884 00:52:33,800 --> 00:52:35,360 un hash set o cosa por el estilo podría 885 00:52:35,360 --> 00:52:38,159 o un hash map o algo por el estilo podría utilizar 886 00:52:38,159 --> 00:52:40,800 directamente el id para obtener el objeto 887 00:52:40,800 --> 00:52:42,380 ¿vale? pero como lo hemos hecho como 888 00:52:42,380 --> 00:52:44,500 un set, pues lo que tengo que hacer es 889 00:52:44,500 --> 00:52:45,460 recorrer el set 890 00:52:45,460 --> 00:52:48,559 iterator it es igual 891 00:52:48,559 --> 00:52:50,880 a new iterator 892 00:52:50,880 --> 00:52:52,260 de alumno 893 00:52:52,260 --> 00:52:54,400 de... no 894 00:52:54,400 --> 00:52:56,760 no, no, no, esto está equivocando 895 00:52:56,760 --> 00:52:58,260 de alumnos 896 00:52:58,260 --> 00:53:00,880 punto get iterator 897 00:53:00,880 --> 00:53:01,940 de iterator 898 00:53:01,940 --> 00:53:04,619 este, y este es 899 00:53:04,619 --> 00:53:06,320 un iterador de alumno 900 00:53:06,320 --> 00:53:16,449 wille it.asNext 901 00:53:16,449 --> 00:53:29,519 alumno a es igual 902 00:53:29,519 --> 00:53:32,780 bueno, alumno a lo hago fuera 903 00:53:32,780 --> 00:53:38,059 lo voy a hacer nula aquí 904 00:53:38,059 --> 00:53:42,500 a es igual a it.next 905 00:53:42,500 --> 00:53:57,440 si a.id es igual a id actual 906 00:53:57,440 --> 00:54:36,519 Entonces lo que hago es txtid.setText a a.id txt.dn.setText de a.nombre txtApellido.setText. 907 00:54:37,519 --> 00:54:42,659 de a.apellido 908 00:54:42,659 --> 00:54:45,300 y luego un break 909 00:54:45,300 --> 00:54:49,199 para que salga ya del 910 00:54:49,199 --> 00:54:50,960 while y se acabó 911 00:54:50,960 --> 00:54:52,599 esto debería ser 912 00:54:52,599 --> 00:54:54,619 más o menos, también 913 00:54:54,619 --> 00:54:55,659 podría 914 00:54:55,659 --> 00:54:59,119 hacer que esto 915 00:54:59,119 --> 00:55:03,099 donde está 916 00:55:03,099 --> 00:55:05,199 aquí, al fin y al cabo 917 00:55:05,199 --> 00:55:06,480 esta cosa de aquí 918 00:55:06,480 --> 00:55:12,280 en vez de hacer if primero 919 00:55:12,280 --> 00:55:19,539 puede hacer que si primero me haga un actualizar texto de cero 920 00:55:21,280 --> 00:55:42,389 todo esto esto lo tiene que hacer este de aquí podría hacer un actualizar de cero debería 921 00:55:42,389 --> 00:55:54,349 funcionar y si no hace este otro cosas vale vamos a ver si funciona carga el primero lo 922 00:55:54,349 --> 00:55:56,210 carga, se pincha aquí el 1, el 2 923 00:55:56,210 --> 00:55:58,309 0, 1, 2, 0, 1, 2, 0, 1, 2 924 00:55:58,309 --> 00:55:58,750 0, 1, 2 925 00:55:58,750 --> 00:56:02,170 entonces ahora 926 00:56:02,170 --> 00:56:03,690 tengo que hacer el otro botón 927 00:56:03,690 --> 00:56:08,469 el otro botón funciona 928 00:56:08,469 --> 00:56:10,369 con id actual 929 00:56:10,369 --> 00:56:11,869 menos menos 930 00:56:11,869 --> 00:56:14,429 si 931 00:56:14,429 --> 00:56:16,449 id actual 932 00:56:16,449 --> 00:56:18,369 es 933 00:56:18,369 --> 00:56:20,590 menor que 0 934 00:56:20,590 --> 00:56:24,300 id actual 935 00:56:24,300 --> 00:56:26,219 es igual a 936 00:56:26,219 --> 00:56:30,739 Alumnos.ic-1 937 00:56:30,739 --> 00:56:39,480 Y después, actualizar 938 00:56:39,480 --> 00:56:41,480 Y de actual 939 00:56:41,480 --> 00:56:48,369 Entonces, ahora lanzo 940 00:56:48,369 --> 00:56:50,610 Con esto voy por un lado, con esto voy por el otro 941 00:56:50,610 --> 00:56:53,170 Y funcionan ya los dos 942 00:56:53,170 --> 00:56:55,130 ¿Sí? 943 00:56:56,369 --> 00:57:01,230 Por lo tanto, con esto he acabado mi aplicación más o menos 944 00:57:01,230 --> 00:57:03,570 ¿Vale? Como base ya la tenemos 945 00:57:03,570 --> 00:57:09,050 Ahora, errores que puedan surgir aquí y vamos a ver un poquito qué pasa, ¿vale? 946 00:57:09,309 --> 00:57:10,849 Nosotros tenemos dos aplicaciones. 947 00:57:12,070 --> 00:57:22,989 ¿Qué pasa si yo ahora aquí lanzo otra vez la aplicación esta para cargar y escribo nuevos alumnos? 948 00:57:26,570 --> 00:57:27,230 Y cierro. 949 00:57:28,570 --> 00:57:35,619 Que ahora cuando cargo aquí, los alumnos de antes han desaparecido. 950 00:57:35,619 --> 00:57:36,099 ¿Sí? 951 00:57:36,099 --> 00:57:40,079 queremos nosotros esto 952 00:57:40,079 --> 00:57:41,500 no 953 00:57:41,500 --> 00:57:44,420 entonces lo que queremos hacer nosotros 954 00:57:44,420 --> 00:57:46,800 es que al guardar 955 00:57:46,800 --> 00:57:48,840 nuevos alumnos 956 00:57:48,840 --> 00:57:50,400 se añadan 957 00:57:50,400 --> 00:57:51,960 detrás 958 00:57:51,960 --> 00:57:53,760 de los viejos 959 00:57:53,760 --> 00:57:56,219 vamos a probarlo 960 00:57:56,219 --> 00:57:57,559 si esto funciona 961 00:57:57,559 --> 00:57:59,519 spoiler no 962 00:57:59,519 --> 00:58:02,079 entonces aquí 963 00:58:02,079 --> 00:58:04,300 cuando nosotros creamos el 964 00:58:04,300 --> 00:58:06,000 file output stream 965 00:58:06,000 --> 00:58:11,139 que es el que debería escribir, probamos a ponerle true, ¿vale? 966 00:58:11,539 --> 00:58:19,440 Entonces, fijaos que ahora el fichero es este de aquí, con dentro QEW, 967 00:58:20,500 --> 00:58:33,380 lanzo esta cosa aquí, pongo dentro el señor A y el señor B, cierro, 968 00:58:33,380 --> 00:58:42,320 Y si ahora voy a mirar, dentro aquí está Q, está W, está A y está B. 969 00:58:43,480 --> 00:58:47,000 El problema es esto. 970 00:58:51,530 --> 00:58:55,869 Si me fijo, se parece mucho a esto. 971 00:58:58,460 --> 00:58:58,739 ¿Veis? 972 00:58:59,719 --> 00:59:02,360 Esta de aquí es la cabecera. 973 00:59:02,639 --> 00:59:03,659 Os lo decía antes. 974 00:59:04,340 --> 00:59:07,119 Él ha escrito un fichero, ha puesto la cabecera 975 00:59:07,119 --> 00:59:11,159 Y luego ha empezado a poner los objetos 976 00:59:11,159 --> 00:59:13,920 Cuando he cerrado y abierto otra vez 977 00:59:13,920 --> 00:59:17,059 La segunda vez, cuando ha empezado a escribir 978 00:59:17,059 --> 00:59:20,239 Pues ha vuelto a poner la cabecera 979 00:59:20,239 --> 00:59:22,039 Y luego los objetos 980 00:59:22,039 --> 00:59:25,099 Entonces, cuando ahora lo voy a leer 981 00:59:25,099 --> 00:59:28,340 Este de aquí empezará aquí, encontrará la cabecera, perfecto 982 00:59:28,340 --> 00:59:30,340 Luego se espera de encontrar los objetos 983 00:59:30,340 --> 00:59:31,820 Leerá el primero, Q 984 00:59:31,820 --> 00:59:33,260 Le verá el segundo, W 985 00:59:33,260 --> 00:59:36,119 Y ahora aquí se espera el tercero 986 00:59:36,119 --> 00:59:38,199 Sin embargo, encuentra otra vez la cabecera. 987 00:59:39,400 --> 00:59:40,239 Y entonces explota. 988 00:59:48,579 --> 00:59:49,860 ¿Qué copias de un fichero a otro? 989 00:59:59,760 --> 01:00:00,300 No entiendo. 990 01:00:01,980 --> 01:00:02,960 Vamos por orden. 991 01:00:03,179 --> 01:00:04,300 Este es el problema, ¿vale? 992 01:00:04,780 --> 01:00:06,639 Me dice, oye, mira, que hay algo aquí 993 01:00:06,639 --> 01:00:09,780 que no sé qué es y que no lo entiendo, ¿vale? 994 01:00:10,119 --> 01:00:11,619 Stream corrupted exception. 995 01:00:13,900 --> 01:00:14,019 ¿Sí? 996 01:00:14,539 --> 01:00:16,340 Repito, la causa de esto 997 01:00:16,340 --> 01:00:18,539 es que he escrito en un fichero un objeto, 998 01:00:18,860 --> 01:00:20,460 luego he cerrado todo 999 01:00:20,460 --> 01:00:22,860 y he vuelto a escribir desde cero. 1000 01:00:22,860 --> 01:00:26,699 Porque fijaos que yo he escrito ya dos veces en el fichero 1001 01:00:26,699 --> 01:00:29,480 Porque cuando yo hago esto 1002 01:00:29,480 --> 01:00:32,059 WriteObject 1003 01:00:32,059 --> 01:00:34,539 Esto lo está haciendo dos veces 1004 01:00:34,539 --> 01:00:37,019 Justo 1005 01:00:37,019 --> 01:00:38,860 Aquí no he hecho flash, pero 1006 01:00:38,860 --> 01:00:41,079 O sea, que he escrito dos veces 1007 01:00:41,079 --> 01:00:44,760 Si yo abro el flujo de información 1008 01:00:44,760 --> 01:00:48,000 Escribo un objeto, luego otro, luego otro, luego otro 1009 01:00:48,000 --> 01:00:49,300 Funciona perfectamente 1010 01:00:49,300 --> 01:00:52,699 El problema es cuando cierro este flujo de información 1011 01:00:52,699 --> 01:00:59,780 y lo vuelvo a abrir otra vez la primera vez que escribe un object output stream escribe 1012 01:00:59,780 --> 01:01:06,260 una cabecera vale entonces si yo he apagado encendido otra vez y vuelvo a escribir en el 1013 01:01:06,260 --> 01:01:30,130 mismo en el mismo fichero pues tengo este problema una opción es esta vale es vale 1014 01:01:30,130 --> 01:01:39,250 entonces cuando yo enciendo pillo todos los leo el fichero me cargo como hace la otra todo el 1015 01:01:39,250 --> 01:01:45,730 fichero en la nueva cosa así a este punto añado los objetos que quiero y vuelvo a reescribir no 1016 01:01:45,730 --> 01:01:53,590 con la opción true más entero todo el fichero otra vez es una opción vale mientras que los 1017 01:01:53,590 --> 01:02:01,130 ficheros sean pequeños porque si yo tengo ya 7 millones de alumnos porque no es un alumno son 1018 01:02:01,130 --> 01:02:06,170 productos que se yo y ahora cada vez que tengo añadir un producto me tengo que cargar en memoria 1019 01:02:06,170 --> 01:02:07,769 7 millones de... 1020 01:02:07,769 --> 01:02:09,889 Añadir uno y reescribir 7 millones 1021 01:02:09,889 --> 01:02:11,610 pues puede ser un problema. 1022 01:02:18,239 --> 01:02:19,500 Copias lo que está escrito allí. 1023 01:02:29,960 --> 01:02:30,840 Hacerlo de uno en uno. 1024 01:02:31,320 --> 01:02:33,480 No ocupas la memoria RAM, pero ocupas tiempo. 1025 01:02:34,300 --> 01:02:35,719 Tienes que hacer... Cada vez que añades uno 1026 01:02:35,719 --> 01:02:37,460 tienes que hacer 7 millones de copias 1027 01:02:37,460 --> 01:02:39,739 de uno en uno, pero 7 millones de copias. 1028 01:02:40,679 --> 01:02:41,679 ¿Sí? Entonces 1029 01:02:41,679 --> 01:02:43,639 la idea es 1030 01:02:43,639 --> 01:02:46,019 si yo pudiera 1031 01:02:46,019 --> 01:02:48,139 directamente escribir 1032 01:02:48,139 --> 01:02:49,619 en el 1033 01:02:49,619 --> 01:02:51,380 fichero 1034 01:02:51,380 --> 01:03:04,179 sería mejor si entonces hay una forma de hacer esto sí vale esto de aquí deriva desde ahora no 1035 01:03:04,179 --> 01:03:30,780 me acuerdo dónde está y te estará en el este de aquí probablemente file a punto y coma 1036 01:03:30,780 --> 01:03:33,739 File 1037 01:03:33,739 --> 01:03:35,380 Output 1038 01:03:35,380 --> 01:03:36,619 Stream 1039 01:03:36,619 --> 01:03:38,139 F 1040 01:03:38,139 --> 01:03:39,019 O 1041 01:03:39,019 --> 01:03:40,079 S 1042 01:03:40,079 --> 01:03:41,360 Es igual 1043 01:03:41,360 --> 01:03:42,519 Hay otra cosa aquí 1044 01:03:42,519 --> 01:03:43,679 Aquí pongo FOSS 1045 01:03:43,679 --> 01:03:46,639 Aquí está 1046 01:03:46,639 --> 01:03:47,880 Si no me equivoco 1047 01:03:47,880 --> 01:03:49,119 Vrite 1048 01:03:49,119 --> 01:03:50,380 No está aquí 1049 01:03:50,380 --> 01:03:56,449 API 1050 01:03:56,449 --> 01:03:58,030 A ver dónde está 1051 01:03:58,030 --> 01:04:01,809 Java 1052 01:04:01,809 --> 01:04:03,349 API 22 1053 01:04:03,349 --> 01:04:05,909 Esto es 1054 01:04:05,909 --> 01:04:12,670 hay un metodito 1055 01:04:12,670 --> 01:04:13,969 que usa 1056 01:04:13,969 --> 01:04:15,869 object output stream 1057 01:04:15,869 --> 01:04:18,429 que es el responsable de escribir 1058 01:04:18,429 --> 01:04:20,369 el header 1059 01:04:20,369 --> 01:04:22,269 y se llama como 1060 01:04:22,269 --> 01:04:24,050 write stream header 1061 01:04:24,050 --> 01:04:28,269 este señor de aquí 1062 01:04:28,269 --> 01:04:30,570 es el metodito que 1063 01:04:30,570 --> 01:04:32,730 al principio cuando el crea 1064 01:04:32,730 --> 01:04:34,130 dice vale voy a escribir 1065 01:04:34,130 --> 01:04:35,710 la primera escritura 1066 01:04:35,710 --> 01:04:38,329 se llama este writeStreamHeader 1067 01:04:38,329 --> 01:04:39,530 al llamar este 1068 01:04:39,530 --> 01:04:42,050 writeStreamHeader lo que hace 1069 01:04:42,050 --> 01:04:43,429 es copiar 1070 01:04:43,429 --> 01:04:45,449 la cabecera 1071 01:04:45,449 --> 01:04:47,929 y luego después a partir de ahí no se llama 1072 01:04:47,929 --> 01:04:49,809 entonces se ponen todos los métodos 1073 01:04:49,809 --> 01:04:51,849 cuando hago el writeObject o lo que sea 1074 01:04:51,849 --> 01:04:53,909 ¿vale? entonces la idea 1075 01:04:53,909 --> 01:04:55,829 aquí es que este 1076 01:04:55,829 --> 01:04:57,789 señor no tiene 1077 01:04:57,789 --> 01:04:59,570 que hacer siempre su trabajo 1078 01:04:59,570 --> 01:05:07,699 gente duerme aquí, hay señores 1079 01:05:07,699 --> 01:05:11,039 entonces lo que vamos 1080 01:05:11,039 --> 01:05:21,539 hacer es lo siguiente me creo una versión parecida pero no igual de mi object output stream vale es 1081 01:05:21,539 --> 01:05:34,599 decir que aquí yo me creo una nuevo una nueva clase que se llama object output stream 2 por 1082 01:05:34,599 --> 01:05:49,760 ejemplo o mi objeto de sim o el concepto hay que hacer esto no hay que usar un rm con base 1083 01:05:49,760 --> 01:05:55,639 de datos vale pero si lo quieres hacer así una opción es la que ha dicho tú copio todo 1084 01:05:55,639 --> 01:06:01,940 desde principio otra opción es crear varios ficheros cada vez que eres un fichero nuevo 1085 01:06:01,940 --> 01:06:06,599 con un numerito serial entonces cuando luego cargarás en vez de cargar a uno solo te lees 1086 01:06:06,599 --> 01:06:15,300 todos y te lo vas a hacer otra opción es ésta entonces en este cosa aquí yo le digo que extens 1087 01:06:16,780 --> 01:06:24,099 object output stream a nosotros porque nos interesa esto no porque sea elegante o la 1088 01:06:24,099 --> 01:06:31,219 cosa más mejor del mundo porque usa en un cierto sentido cosas que nosotros 1089 01:06:31,219 --> 01:06:44,139 hemos visto vale entonces por qué no default constructor que anotando leo exception vale 1090 01:06:44,139 --> 01:06:51,460 entonces este de aquí habrá que crear una cosa este estilo vale no lo toco más de lo que tiene 1091 01:06:51,460 --> 01:06:59,360 que ser lo mínimo vale no quiero modificar nada lo único que quiero modificar es el bright stream 1092 01:06:59,360 --> 01:07:01,260 Header, ¿vale? Esta cosa aquí 1093 01:07:01,260 --> 01:07:02,800 ¿Dónde está? 1094 01:07:05,070 --> 01:07:06,010 Aquí, este 1095 01:07:06,010 --> 01:07:07,670 WriteStreamHeader 1096 01:07:07,670 --> 01:07:10,250 Entonces, ProtectedVoid 1097 01:07:10,250 --> 01:07:15,619 Lo que hago yo es 1098 01:07:15,619 --> 01:07:17,679 Protected 1099 01:07:17,679 --> 01:07:19,239 Void 1100 01:07:19,239 --> 01:07:20,639 Esta cosa aquí 1101 01:07:20,639 --> 01:07:24,579 Esto está sobrescribiendo 1102 01:07:24,579 --> 01:07:25,840 El fichero 1103 01:07:25,840 --> 01:07:27,960 Está haciendo un overwriting 1104 01:07:27,960 --> 01:07:28,760 ¿Vale? 1105 01:07:29,340 --> 01:07:32,599 Que si yo llamaré un objeto de ObjectStream2 1106 01:07:32,599 --> 01:07:34,019 Pues el 1107 01:07:34,019 --> 01:07:36,119 método writeStreamMeter se llamará 1108 01:07:36,119 --> 01:07:37,619 este de aquí, ¿vale? 1109 01:07:37,739 --> 01:07:40,139 y entonces aquí la idea es sencilla 1110 01:07:40,139 --> 01:07:42,059 es decir, la primera vez que yo 1111 01:07:42,059 --> 01:07:43,840 uso esto, si lo uso 1112 01:07:43,840 --> 01:07:45,920 o si en el fichero 1113 01:07:45,920 --> 01:07:47,079 en el que voy a escribir 1114 01:07:47,079 --> 01:07:51,059 ya he escrito algo 1115 01:07:51,059 --> 01:07:54,039 si el fichero ya 1116 01:07:54,039 --> 01:07:55,380 existe en un cierto sentido 1117 01:07:55,380 --> 01:07:57,920 pues esto no lo tendré que hacer 1118 01:07:57,920 --> 01:07:59,119 y si no, sí 1119 01:07:59,119 --> 01:08:01,679 tengo que encontrar un modo 1120 01:08:01,679 --> 01:08:02,880 para que 1121 01:08:02,880 --> 01:08:05,440 Esta cosa de aquí 1122 01:08:05,440 --> 01:08:07,260 Si 1123 01:08:07,260 --> 01:08:09,539 Si lo tiene que hacer 1124 01:08:09,539 --> 01:08:12,559 Haga super.brit 1125 01:08:12,559 --> 01:08:14,500 Stream header 1126 01:08:14,500 --> 01:08:17,880 Esto se enfada porque 1127 01:08:17,880 --> 01:08:18,939 Lanza 1128 01:08:18,939 --> 01:08:21,930 Exception 1129 01:08:21,930 --> 01:08:25,310 Y si en vez, ya lo he hecho 1130 01:08:25,310 --> 01:08:27,430 Ya no lo tengo que volver a hacer 1131 01:08:27,430 --> 01:08:28,850 Ya hago algo por el estilo 1132 01:08:28,850 --> 01:08:31,770 Pues entonces, no lo tengo que hacer 1133 01:08:31,770 --> 01:08:32,909 Tengo que hacer nada 1134 01:08:32,909 --> 01:08:34,689 Ideas 1135 01:08:34,689 --> 01:08:46,800 ¿De qué fichero? 1136 01:08:58,800 --> 01:09:00,220 O sea, aquí tengo dos opciones 1137 01:09:00,220 --> 01:09:05,579 Yo necesito saber si el fichero que estoy manejando 1138 01:09:05,579 --> 01:09:06,600 Tiene algo o no 1139 01:09:06,600 --> 01:09:07,260 ¿Vale? 1140 01:09:07,420 --> 01:09:10,319 Entonces, una opción es hacerlo desde aquí 1141 01:09:10,319 --> 01:09:11,539 Desde la aplicación 1142 01:09:11,539 --> 01:09:13,819 Y es decir, voy a mirar el fichero 1143 01:09:13,819 --> 01:09:15,000 Si en el fichero hay algo 1144 01:09:15,000 --> 01:09:17,439 No hay nada, perdón, es un fichero nuevo 1145 01:09:17,439 --> 01:09:20,520 Uso el Object to Stream normal y corriente 1146 01:09:20,520 --> 01:09:23,180 Y si no, uso la versión 2 1147 01:09:23,180 --> 01:09:27,680 ¿Puede tener? 1148 01:09:27,680 --> 01:09:32,159 Pero la cabecera es siempre esa 1149 01:09:32,159 --> 01:09:34,479 Y de todas formas 1150 01:09:34,479 --> 01:09:36,619 Si tú una vez ya la has usado 1151 01:09:36,619 --> 01:09:38,060 Ya habrás hecho esta cosa 1152 01:09:38,060 --> 01:09:40,079 Y ahora no tienes que hacer, tienes solo que añadir detrás 1153 01:09:40,079 --> 01:09:41,000 ¿Vale? 1154 01:09:41,899 --> 01:09:44,119 Pero, la otra opción 1155 01:09:44,119 --> 01:09:47,460 Es en vez que mi object stream 2 1156 01:09:47,460 --> 01:09:50,939 En vez de recibir 1157 01:09:50,939 --> 01:09:52,220 Solo 1158 01:09:52,220 --> 01:09:54,020 La conexión 1159 01:09:54,020 --> 01:09:56,720 ¿Vale? Reciba también 1160 01:09:56,720 --> 01:09:57,880 Algo más 1161 01:09:57,880 --> 01:10:02,260 O sea, que le pase, por ejemplo, el fichero o cosa por el estilo 1162 01:10:02,260 --> 01:10:05,300 Otra opción también es que yo esto lo recibo 1163 01:10:05,300 --> 01:10:06,680 ¿Vale? 1164 01:10:07,159 --> 01:10:10,500 Entonces, a ver si con esto puedo hacer algo 1165 01:10:10,500 --> 01:10:11,960 Por ejemplo 1166 01:10:11,960 --> 01:10:17,100 OutputStreamOut 1167 01:10:17,100 --> 01:10:24,859 Y hacer que cuando el constructor 1168 01:10:24,859 --> 01:10:27,479 Hago que this.out 1169 01:10:27,479 --> 01:10:28,960 Es igual a out 1170 01:10:28,960 --> 01:10:34,300 O sea que ahora aquí puedo usar este out 1171 01:10:34,300 --> 01:10:36,640 Ahora el 1172 01:10:36,640 --> 01:10:39,279 Me sirve poco o nada 1173 01:10:39,279 --> 01:10:40,420 Necesito un int 1174 01:10:40,420 --> 01:10:41,319 Un int 1175 01:10:41,319 --> 01:10:47,920 Out punto 1176 01:10:47,920 --> 01:10:50,659 Vamos a ver que puedo sacar de aquí 1177 01:10:50,659 --> 01:10:58,630 Si desde aquí podía sacar el fichero 1178 01:10:58,630 --> 01:11:00,310 Al que está conectado 1179 01:11:00,310 --> 01:11:02,369 Pues no necesitaba que me pasara un fichero 1180 01:11:02,369 --> 01:11:02,970 ¿Vale? 1181 01:11:03,289 --> 01:11:04,770 Pero bueno, como no puedo 1182 01:11:04,770 --> 01:11:08,729 pues entonces aquí por ejemplo 1183 01:11:08,729 --> 01:11:10,770 file f 1184 01:11:10,770 --> 01:11:14,170 esto ya no me sirve 1185 01:11:14,170 --> 01:11:20,149 prefiero poner un file f 1186 01:11:20,149 --> 01:11:24,430 y hacer que this.f es igual a f 1187 01:11:24,430 --> 01:11:26,189 ahora esto quiere decir 1188 01:11:26,189 --> 01:11:28,189 que cuando creo un autostream 1189 01:11:28,189 --> 01:11:30,029 de tipo 2, no lo puedo 1190 01:11:30,029 --> 01:11:31,909 construir así directamente 1191 01:11:31,909 --> 01:11:33,710 tendré que pasar también 1192 01:11:33,710 --> 01:11:34,789 el fichero 1193 01:11:34,789 --> 01:11:36,489 esto 1194 01:11:36,489 --> 01:11:39,329 un poco veucho 1195 01:11:39,329 --> 01:11:41,029 ¿vale? porque estoy cambiando 1196 01:11:41,029 --> 01:11:42,770 como se crea un object stream 1197 01:11:42,770 --> 01:11:45,250 autostream 2 ¿vale? pero a ver 1198 01:11:45,250 --> 01:11:46,470 más o menos 1199 01:11:46,470 --> 01:11:49,250 entonces ahora 1200 01:11:49,250 --> 01:11:51,010 lo que haría aquí es vale 1201 01:11:51,010 --> 01:11:53,149 tengo el fichero entonces me 1202 01:11:53,149 --> 01:11:54,970 pregunto si el fichero por ejemplo 1203 01:11:54,970 --> 01:11:57,590 existe entonces 1204 01:11:57,590 --> 01:12:01,050 perdón si el fichero no existe 1205 01:12:01,050 --> 01:12:02,489 entonces llamo esta cosa 1206 01:12:02,489 --> 01:12:04,930 si en vez del fichero existe pues 1207 01:12:04,930 --> 01:12:07,489 no lo hago, o mejor 1208 01:12:07,489 --> 01:12:09,270 porque podría ser que el fichero sea 1209 01:12:09,270 --> 01:12:10,949 creado antes, vale 1210 01:12:10,949 --> 01:12:13,350 vamos a ver si hay algo dentro de este 1211 01:12:13,350 --> 01:12:15,170 fichero, entonces hago 1212 01:12:15,170 --> 01:12:17,430 un file input 1213 01:12:17,430 --> 01:12:19,609 stream f 1214 01:12:19,609 --> 01:12:21,569 fs, es igual a 1215 01:12:21,569 --> 01:12:23,789 new file input 1216 01:12:23,789 --> 01:12:25,770 stream f 1217 01:12:25,770 --> 01:12:30,539 y hemos visto 1218 01:12:30,539 --> 01:12:32,600 antes que podía preguntarme de si 1219 01:12:32,600 --> 01:12:34,680 fs.available 1220 01:12:35,779 --> 01:12:38,890 mayor que 0 1221 01:12:38,890 --> 01:12:41,529 si hay algo 1222 01:12:41,529 --> 01:12:42,989 entonces 1223 01:12:42,989 --> 01:12:45,329 o mejor, hagámoslo así 1224 01:12:45,329 --> 01:12:47,630 si no hay nada 1225 01:12:47,630 --> 01:12:58,699 allí, vale 1226 01:12:58,699 --> 01:13:01,260 si yo voy a mirar este de aquí 1227 01:13:01,260 --> 01:13:02,880 digo, intenta leerlo 1228 01:13:02,880 --> 01:13:05,060 y si al intentar leerlo 1229 01:13:05,060 --> 01:13:06,039 no hay nada 1230 01:13:06,039 --> 01:13:08,659 o sea, porque 1231 01:13:08,659 --> 01:13:11,439 es mayor que cero, no es mayor que cero 1232 01:13:11,439 --> 01:13:13,119 entonces quiere decir que hasta 1233 01:13:13,119 --> 01:13:15,119 si has sido creado, ahora mismo está vacío 1234 01:13:15,119 --> 01:13:16,979 no hay la cabecera, por lo tanto 1235 01:13:16,979 --> 01:13:18,039 escribo la cabecera 1236 01:13:18,039 --> 01:13:21,420 Si no, este programa no hace nada 1237 01:13:21,420 --> 01:13:22,579 Este método no hace nada 1238 01:13:22,579 --> 01:13:24,079 ¿Sí? 1239 01:13:26,000 --> 01:13:26,640 Entonces 1240 01:13:26,640 --> 01:13:28,880 Vamos a ver 1241 01:13:28,880 --> 01:13:34,069 Esto podría explotar si esto no existe 1242 01:13:34,069 --> 01:13:35,430 Vamos a verlo 1243 01:13:35,430 --> 01:13:42,020 Entonces, lanzo 1244 01:13:42,020 --> 01:13:43,939 Esto lo lanzo de aquí 1245 01:13:43,939 --> 01:13:46,119 He creado con un impuesto en 2 1246 01:13:46,119 --> 01:13:47,479 Lanzo 1247 01:13:47,479 --> 01:13:50,060 Escribo a 1248 01:13:50,060 --> 01:13:53,460 Escribo b, b, b 1249 01:13:53,460 --> 01:13:56,350 Y cierro 1250 01:13:56,350 --> 01:14:02,590 explota porque explota null pointer excepción vamos a ver dónde está en el puente de excepción 1251 01:14:04,010 --> 01:14:17,170 y en it right streaming en esta cosa nueva que hemos hecho nosotros dice que esta cosa de aquí 1252 01:14:17,170 --> 01:14:26,289 me da un nulo porque probablemente efe no existe vale entonces podremos preguntarnos aquí si fish 1253 01:14:26,289 --> 01:14:55,659 is es null, o, a ver si esto funciona, o, o end, vamos a ver si esto funciona, entonces, a, add, b, b, b, add, cierro, sigue explotando, 1254 01:14:55,659 --> 01:15:05,670 siempre en un pointer excepción pero no debería vamos a verlo es aquí siempre 1255 01:15:05,670 --> 01:15:15,819 mismo punto pero porque el pointer excepción tiene que ser en otro lado 1256 01:15:15,819 --> 01:15:34,380 super punto superado pauso vale entonces hemos hecho algunos cambios hemos 1257 01:15:34,380 --> 01:15:40,939 cambiado que sustancialmente hemos creado un fichero nuevo en el que se 1258 01:15:40,939 --> 01:15:48,899 guardan cuántos alumnos se han creado en total de esta forma cuando la aplicación de creación 1259 01:15:48,899 --> 01:15:58,819 arranca lee cuántos cuantos alumnos se han creado hasta ahora y lo guarda en alumnos 1260 01:15:58,819 --> 01:16:04,319 creatividad así que los nuevos alumnos se crean con la id correcta vale y cada vez que se cierra 1261 01:16:04,319 --> 01:16:05,880 pues guarda este número 1262 01:16:05,880 --> 01:16:07,140 hasta donde ha llegado 1263 01:16:07,140 --> 01:16:09,659 y entonces con esto ya 1264 01:16:09,659 --> 01:16:12,000 debería más o menos funcionar 1265 01:16:12,000 --> 01:16:12,960 ahí es la hora 1266 01:16:12,960 --> 01:16:15,979 si, no, hacedlo vosotros