20250506 EjerSplitMerge_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, pues vamos a ver qué nos decía la otra pestañita.
00:00:02
Le damos un nombre.
00:00:08
Al pulsar el botón de unir, se solicitará el nombre del fichero de destino y ahora buscará ficheros que se llamen así, seguido de un número y con extensión PTR, ordenados a partir de 1.
00:00:11
Bueno, nosotros lo hemos hecho antes con 0, pero da igual.
00:00:26
Sería empezar la I en lugar de 0 en 1, pero da lo mismo.
00:00:28
y a partir de ahí
00:00:31
leemos los ficheros
00:00:33
los guardamos
00:00:35
en una estructura de datos dinámica
00:00:40
que contenga file
00:00:42
y ahora
00:00:44
tendremos que leer
00:00:48
de todos esos y llevarlos a un fichero
00:00:50
con el nombre indicado
00:00:53
bueno, más o menos entendemos lo que hay que hacer
00:00:53
nos van a dar un nombre, una raíz común
00:00:57
habrá que buscar
00:01:00
todos los ficheros
00:01:02
que se llamen así
00:01:05
no especifica en qué ruta
00:01:05
vamos a poner que en la ruta por defecto
00:01:08
del proyecto
00:01:10
todos los ficheros que se llamen así
00:01:11
seguidos de un numerito
00:01:14
y una extensión ptr
00:01:16
y luego tendrá que ir leyendo
00:01:17
de ellos e ir escribiéndolo
00:01:20
todo sucesivamente en otro fichero final
00:01:22
pues venga va a tener
00:01:24
solamente un botón
00:01:26
merge
00:01:28
y el nombre
00:01:30
en un text field
00:01:32
con el nombre de la raíz.
00:01:37
Vale.
00:01:39
Ah, no, en este text field
00:01:44
el fichero destino.
00:01:45
Y los...
00:01:47
Ah, vale, el merge solicita...
00:01:51
Venga, pues a ver.
00:01:54
Vamos a ver.
00:01:55
Emerge, entonces.
00:01:59
Primero, un text field
00:02:02
A ver, primero, antes que nada
00:02:06
Poner el
00:02:08
Antes que nada
00:02:09
Poner
00:02:19
Venga, continuamos
00:02:19
Vamos a acabar
00:02:24
¿Qué?
00:02:25
¿Vas a seguir un rato a dar una vuelta?
00:02:27
¡Hala! Panel de Merge
00:02:29
Absolute Layout
00:02:31
Ahora hemos dicho
00:02:33
Un Text Fill
00:02:35
Para poner
00:02:35
La raíz
00:02:37
De los ficheros que se van a unir
00:02:40
Vale
00:02:42
Texto raíz le voy a llamar
00:02:45
Texto raíz
00:02:49
Vale
00:02:52
Vamos a poner una etiqueta
00:02:53
Para indicar al usuario lo que tiene que poner ahí
00:02:55
Y ahí en esa etiqueta
00:02:57
Pues tiene que haber
00:03:01
Raíz
00:03:02
De los ficheros
00:03:06
A unir
00:03:09
raíz de los ficheros
00:03:11
a unir, vale, ya está
00:03:17
ahora, botón de merge, pues venga
00:03:25
botón, se va a ir aquí
00:03:29
y este botón va a tener como texto, pues eso
00:03:32
merge
00:03:43
y ya está
00:03:44
no hay más controles que poner
00:03:48
ahí se pone la raíz y cuando se dé al botón
00:03:50
él te pide en un jOptionPane el nombre del fichero destino
00:03:53
y te hace todo eso
00:03:55
que dice que hay que hacer
00:03:57
pues venga, solo hay un evento entonces
00:03:58
el del botón, pues vamos a hacer el evento
00:04:01
venga, evento del botón
00:04:03
primero
00:04:14
nos va a abrir
00:04:16
un jOptionPane
00:04:18
para pedirnos el nombre del fichero
00:04:20
destino. Pues un jOptionPane
00:04:22
como el que hemos abierto antes para
00:04:25
poner el fichero de destino
00:04:29
sobre el que vamos a escribir. El fichero
00:04:33
de destino va a ser
00:04:38
la vuelta que nos da un jOptionPane
00:04:40
con el showInputDialog que le ponemos
00:04:44
introduzca
00:04:52
nombre
00:04:55
fichero, destino
00:04:57
bueno, pues sobre este fichero
00:04:59
vamos a escribir
00:05:11
vale, pero ahora
00:05:12
sobre todo
00:05:14
lo que nos importa es
00:05:17
crear una estructura
00:05:19
dinámica, una estructura de este tipo
00:05:21
por ejemplo
00:05:23
una release, esta misma
00:05:33
una estructura dinámica
00:05:34
con todos los objetos file que se van a unir.
00:05:38
Porque una vez que tengamos una estructura dinámica
00:05:43
con todos los objetos file que se van a unir,
00:05:45
se tratará de recorrerla y abrimos para leer
00:05:49
y escribimos en el otro.
00:05:53
Y este primero lo cerramos.
00:05:55
En la siguiente iteración sobre el list,
00:05:57
abrimos el siguiente y seguimos escribiendo en el otro
00:05:59
que se abrió para escribir al principio de todo.
00:06:02
Luego, una vez que tengamos esta estructura
00:06:05
con los ficheros a unir es un bucle que itere por el file
00:06:07
y lea cada uno de ellos y escriba el otro
00:06:10
y ya está, pero claro, tenemos que conseguir
00:06:13
todos esos files, bueno
00:06:16
pues no es tan difícil porque tendremos que
00:06:18
listar todos los ficheros que estén
00:06:21
en el directorio en el que se supone que estamos trabajando
00:06:24
no nos lo especifica, nos supone que estamos trabajando en la raíz del proyecto
00:06:27
para que no sea, de todos esos ficheros
00:06:30
ir cogiendo aquellos cuyo nombre
00:06:33
siga este patrón
00:06:37
empieza con lo que hay en área de texto
00:06:38
continúa con
00:06:41
un numerito y tiene como extensión
00:06:43
ptr
00:06:45
pues venga, vamos a hacerlo primero esto
00:06:46
vamos a listar
00:06:48
todos los
00:06:53
ficheros que están
00:06:55
en el directorio de trabajo
00:06:56
ala, esto mismo que he hecho
00:07:04
esta línea que he hecho, lo he hecho sobre una línea
00:07:11
no os agobia, o sea, new file
00:07:13
recordad que el punto
00:07:15
es el directorio actual de trabajo
00:07:18
el punto siempre significa el directorio actual de trabajo
00:07:21
que en nuestro caso es la raíz del proyecto
00:07:23
vale
00:07:25
entonces
00:07:27
a la vez que instancio ese objeto file
00:07:28
en lugar de guardar una referencia aparte
00:07:31
y luego esa referencia
00:07:33
hacer ya list files para que me dé todos los ficheros que tiene
00:07:34
pues no lo guardo en una referencia aparte
00:07:37
ya directamente le hago list files
00:07:40
y ya recordad que este método
00:07:41
que lo hemos usado alguna vez
00:07:43
nos da un array con todos los objetos file
00:07:44
que está en esa ubicación
00:07:47
vale, pues ahora habrá que ir
00:07:49
uno por uno y todos aquellos
00:07:52
que sean ficheros
00:07:54
y cuyo nombre
00:07:55
empiece con la raíz común
00:07:56
continúe con un número y tenga extensión
00:07:59
ptr, pues todos esos se van a la estructura
00:08:03
file
00:08:05
bueno, no, estos son todos los que hay en la carpeta
00:08:05
todos
00:08:12
pero tengo que
00:08:13
meter en el list de arriba los que me interesan
00:08:15
vale, pues
00:08:18
entonces, esto ahora ya
00:08:19
podemos hacer, vamos a ir uno por uno
00:08:21
para cada objeto file
00:08:23
en este listado de
00:08:31
ficheros, para cada objeto file
00:08:35
¿qué tenemos que hacer?
00:08:37
si cumple la condición
00:08:40
que
00:08:42
necesitamos y es que su nombre responde
00:08:44
al patrón correspondiente
00:08:46
si la cumple se va al listado de arriba
00:08:47
entonces
00:08:50
esto si que vamos a sacarlo, método aparte
00:08:51
por comodidad, entonces podemos hacer
00:08:53
validar nombre
00:08:55
de f
00:09:03
pues si validara el nombre
00:09:04
entonces es uno de los ficheros a unir
00:09:07
ficheros unir
00:09:09
punto ad f
00:09:11
bueno vamos a ponerle antes y si es fichero
00:09:12
porque puede ser directorio porque list file
00:09:18
me saca todo lo que hay dentro de
00:09:20
esto sean directorios
00:09:22
sean ficheros entonces puedo ser primero
00:09:24
si
00:09:26
f
00:09:28
punto isFile
00:09:30
y además
00:09:33
de ser fichero
00:09:37
vale, pues este bucle está claro
00:09:38
lo que hace, se va
00:09:59
a todos y cada uno de los ficheros
00:10:00
que están contenidos en el
00:10:03
directorio de trabajo
00:10:05
si son ficheros
00:10:07
y además su nombre
00:10:09
valida, que todavía no hemos hecho el método de validar
00:10:11
añádelo como fichero a unir
00:10:13
a la estructura de fichero a unir
00:10:15
que está arriba, entonces este método
00:10:17
validar, vamos a tener que hacerlo
00:10:22
vamos a tener que hacerlo
00:10:23
pues por ejemplo vamos a hacerlo
00:10:26
aquí
00:10:27
static boolean
00:10:32
validar
00:10:42
está sin hacer, con lo cual
00:10:45
un retunfalse, porque ahora mismo está sin hacer
00:10:50
ahora mismo subimos que no valida ninguno
00:10:52
vale
00:10:53
tendremos que meter ahora aquí el código
00:10:55
para ver si este fichero
00:10:58
su nombre cumple la condición que queremos
00:11:00
venga
00:11:02
validar
00:11:04
vale
00:11:10
y estamos
00:11:11
en este evento
00:11:13
en cual estamos aquí
00:11:16
vale, pues entonces seguimos
00:11:18
nos falta reinar este huequito
00:11:23
claro, como validar el nombre de ese fichero
00:11:25
una vez que se fuera terminado
00:11:26
ya tenemos en esta
00:11:28
estructura de arriba
00:11:31
todos los ficheros a unir, pues ahora lleven
00:11:32
la parte fácil, que es recorrerlos
00:11:34
abrirlos para leer y escribir en el
00:11:36
de destino. El de destino
00:11:39
su nombre, ¿dónde está? Aquí.
00:11:41
Pues este vamos a abrirlo para escribir.
00:11:43
Pues entonces
00:11:46
nos abrimos
00:11:46
este.
00:11:48
Fichero destino.
00:12:00
Y un try-cash
00:12:06
dentro del cual metemos
00:12:07
todo lo demás. Vale, ahora
00:12:09
ya sí que hay que hacer un bucle que vaya recorriendo
00:12:17
los ficheros a unir.
00:12:19
Pues para cada fichero
00:12:21
F dentro de
00:12:23
ficheros a unir, ¿qué hay que hacer?
00:12:25
lo abrimos como lectura, hacemos un bucle que lo lea hasta el final
00:12:33
y cada carácter leído se envía aquí
00:12:37
pues venga, lo abrimos como lectura, nos metemos en el bucle
00:12:40
de lectura de toda la vida, para leer el fichero enterito
00:12:55
while n, siendo n que
00:12:59
pues siendo n el resultado de haber leído de este
00:13:05
sea diferente de menos uno
00:13:10
pues ¿qué tenemos que hacer mientras sea diferente de menos uno?
00:13:15
escribirlo en el otro
00:13:19
ya está, cuando este while ha terminado
00:13:20
ya hemos leído ese fichero que lo cerramos
00:13:29
entonces este for va fichero por fichero
00:13:32
lo abre para leer, lo lee entero y lo manda al de destino
00:13:44
y así todos uno tras otro
00:13:47
cuando el bucle for ha terminado
00:13:50
ya hemos escrito todos, con lo cual
00:13:52
este último ya lo podemos cerrar
00:13:55
cuando el bucle fuera terminado
00:13:57
ya hemos leído todos los que había que unir
00:14:00
los hemos mandado al de destino
00:14:03
pues ya cerramos el de destino
00:14:04
ya están todos unidos en el de destino
00:14:06
lo único que nos falta ahora es
00:14:12
este método
00:14:17
que seleccione solamente
00:14:18
los ficheros cuyo nombre responde al patrón
00:14:21
correspondiente, ya está
00:14:23
bueno, lo que hemos hecho está claro
00:14:25
para poder probarlo vamos a
00:14:49
completar validar, porque ahora
00:14:53
si lo probamos no va a seleccionar ningún fichero
00:14:54
porque todo sale en falso, así que
00:14:56
vamos a hacer
00:14:58
el método validar
00:15:01
el método validar tiene que quedarse
00:15:02
con el nombre del fichero y ver
00:15:06
si valida
00:15:08
string
00:15:09
nombre
00:15:12
igual a f.getName
00:15:13
este es el nombre
00:15:16
entonces hay que ver
00:15:18
si la primera parte del fichero es igual
00:15:21
a la raíz que me han dado, entonces la raíz que me han dado estaba
00:15:26
a ver si no nos perdemos con validar
00:15:30
se supone que estaba en este, que es texto raíz
00:15:34
en texto raíz, aquí está
00:15:36
pues entonces en validar
00:15:40
string la raíz
00:15:48
Está en
00:15:53
Texto raíz
00:15:54
Punto get
00:15:57
Text
00:15:59
Y texto raíz
00:16:03
Ah, vale, sí
00:16:06
No me lo coge
00:16:12
Porque claro, no está declarada
00:16:14
Como estática
00:16:16
Vale, vamos a pasarle
00:16:18
Al botón validar
00:16:30
El fichero y el
00:16:32
Y la raíz
00:16:34
La vamos a pasar
00:16:36
Así no la tenemos que coger aquí
00:16:38
entonces la raíz se la vamos a pasar
00:16:39
sí, pero porque
00:16:43
lo tendrás de cara a otro sitio, lo habrás puesto
00:16:49
como estática, pero yo no quiero
00:16:51
o el método, porque el método
00:16:52
lo has puesto, igual no lo has sacado
00:16:55
de la clase, sino que lo has hecho en la clase interna
00:16:57
depende de donde lo hayas colocado
00:16:59
claro, pero es que yo lo he sacado fuera
00:17:00
pero bueno
00:17:03
déjalo como lo tienes si quieres, entonces
00:17:04
mi validar
00:17:07
que está aquí
00:17:09
a mi validar le voy a pasar
00:17:10
la raíz, que es texto
00:17:13
raíz punto
00:17:16
de text
00:17:18
vale
00:17:20
a validar le paso
00:17:21
el fichero y la raíz
00:17:26
común para que se ponga a validar
00:17:28
pues venga
00:17:30
ahora ya me voy otra vez aquí
00:17:30
vale, pues entonces tenemos que ver
00:17:33
aquí donde
00:17:39
ahí
00:17:47
al método validar lo he cambiado para que reciba
00:17:47
dos parámetros, el fichero del cual tiene que validar nombre
00:17:51
y la raíz que tiene que comprobar
00:17:53
que está en el nombre y eso está en el text field
00:17:57
del área de texto, por eso lo he puesto ahí
00:18:00
vale, pues nos vamos aquí abajo
00:18:02
y ahora ya
00:18:07
ahora ya esto lo podemos validar, pues bueno, vamos a ver
00:18:10
por ejemplo, el nombre
00:18:13
es un string y la clase string tiene un montón
00:18:17
de métodos útiles que hemos mirado en su momento
00:18:20
por ejemplo, tiene el método
00:18:22
substring
00:18:24
o incluso
00:18:25
este nos es más útil, el startsWith
00:18:30
este solo por el nombre nos viene muy bien
00:18:31
que es, si empieza
00:18:34
con, entonces este
00:18:36
te dice
00:18:38
si el string
00:18:40
este empieza con lo que tú le des
00:18:41
vale, pues entonces
00:18:44
si empieza con
00:18:46
raíz
00:18:51
esta ya
00:18:52
tiene la primera validación hecha
00:18:55
¿verdad? por ejemplo
00:18:56
validación una
00:19:01
que empiece
00:19:07
con el texto de la raíz
00:19:09
entonces
00:19:11
igual que tiene un startsWith es probable que tenga
00:19:13
un end, porque si tuviera
00:19:15
un método endsWith
00:19:17
pues estupendo
00:19:19
termina con .ptr
00:19:20
pues si termina con .ptr
00:19:23
ya tenemos la otra validación
00:19:29
vale
00:19:31
si las dos
00:19:37
son válidas
00:19:41
está empezando con la raíz que está ahí
00:19:41
y además está terminando con PTR
00:19:44
entonces
00:19:46
ahora la otra validación es más rara
00:19:48
porque hay que ver que entre la raíz
00:19:50
y PTR todo lo que hay son cifras
00:19:52
decimales, numeritos
00:19:54
todo lo que hay son cifras decimales
00:19:56
entonces aquí
00:19:57
nos tendríamos que quedar
00:19:58
con la subcadena
00:20:01
comprendida entre raíz y PTR
00:20:03
ir carácter por carácter
00:20:06
viendo si esos caracteres están todos comprendidos
00:20:08
en la tabla ASCII entre el 0 y el 9
00:20:10
vale, venga, vamos a ver, es un poco retorcido
00:20:11
yo creo que Estefano tenía en mente
00:20:14
validar números de diferentes
00:20:16
cifras, solo de una, pero vamos a hacerlo
00:20:18
vale, pues ahora ya sí que nos podemos
00:20:20
quedar con
00:20:22
hay un método
00:20:23
substring para extraer subcadenas
00:20:26
si uno cotilla aquí los
00:20:28
métodos, pues tenemos
00:20:30
el método substring
00:20:32
que le dices
00:20:33
una posición inicial
00:20:36
y una posición final
00:20:38
y te da la subcadena comprendida en esas posiciones
00:20:40
entonces
00:20:43
aquí lo único que hay que fijar
00:20:44
la posición que hay que darle
00:20:46
porque
00:20:48
de substring empieza
00:20:50
a donde le digamos
00:20:53
begin index
00:20:54
entonces hay que darle el tamaño de raíz
00:20:55
y termina
00:20:59
hasta end index
00:21:01
menos uno
00:21:02
que será la longitud de la cadena
00:21:03
menos los cuatro caracteres
00:21:06
de ptr
00:21:09
O sea, yo creo
00:21:09
Así a voz de pronto
00:21:11
Pero bueno, habría que probarlo
00:21:13
Esto sería
00:21:14
Raíz punto length
00:21:17
Y luego sería
00:21:21
Nombre punto length
00:21:23
Menos 4
00:21:28
Quitándole las posiciones
00:21:30
De punto ptr que son 4
00:21:31
Pero vamos a hacer la prueba
00:21:33
Que no la vas a hacer
00:21:39
No la vas a hacer por hacer cosas raras, ¿verdad?
00:21:42
y ahora
00:21:45
vamos ahora simplemente
00:21:51
que muestre
00:22:06
la subcadena
00:22:07
y ahora vamos
00:22:10
a rápidamente
00:22:20
hacer un
00:22:21
main de prueba, muy rápido
00:22:24
prueba, vale
00:22:25
entonces voy a copiar
00:22:42
este de validar aquí para hacer
00:22:44
así la prueba. Y ahora voy a llamar a este método de validar, pasándole un objeto file
00:22:46
con un nombrecito datos98.ptr y pasándole como raíz datos. Y ahora vamos a ver si este
00:23:04
System.out me muestra 98
00:23:24
Porque si no me muestra
00:23:26
98, tengo que mover
00:23:28
Hacia más 1
00:23:30
O menos 1, alguno de estos
00:23:32
Vamos simplemente a ejecutar este
00:23:33
Main, a ver, que me muestra
00:23:36
98, bueno, le hemos clavado
00:23:38
A la primera, vale
00:23:44
Vale, el substring, entonces
00:23:46
Empieza aquí y acaba aquí
00:23:50
Entonces, si le paso 986
00:23:52
A ver
00:23:54
clavado, bueno, bueno
00:23:55
somos muy listos, venga
00:23:58
ya está, pues entonces
00:24:00
nos vamos aquí
00:24:02
ahora ya efectivamente esta es
00:24:03
la subcadena que tiene lo que está entre la
00:24:06
raíz y el ptr, pues vamos a ver
00:24:08
si todas las cifras que tiene son
00:24:10
caracteres decimales
00:24:12
pues ahora ya
00:24:13
boolean
00:24:15
valid 3
00:24:19
igual a true
00:24:21
lo más complicado es la validación
00:24:24
Esto es una locura que no podríamos
00:24:26
En un examen
00:24:28
Y ahora ya sí que vamos a recorrer
00:24:29
Para cada int
00:24:32
Y igual a cero
00:24:35
Mientras y sea menor que
00:24:36
Subcadena.length
00:24:38
Incrementando
00:24:42
Y
00:24:44
3
00:24:45
Igual a
00:24:59
Valir 3
00:25:00
And
00:25:02
Subcadena.length
00:25:03
char add i
00:25:16
para ver si esto es
00:25:18
dígito, vamos a ver la tabla
00:25:21
ASCII
00:25:23
ahora cuando esté todo escrito lo vais a
00:25:24
entender
00:25:27
bien
00:25:28
en la tabla ASCII
00:25:30
ASCII
00:25:33
vale, los números están
00:25:35
entre el
00:25:43
48 y el
00:25:45
57, luego
00:25:47
48 y 57
00:25:48
luego esto entonces
00:25:50
char add i
00:25:53
mayor o igual que 48
00:25:54
y
00:25:57
subcadena
00:26:00
punto
00:26:02
char add i
00:26:05
53 hemos dicho
00:26:07
57
00:26:09
menor o igual que 57
00:26:12
pues esta es la validación 3
00:26:15
que es liosa de entender
00:26:22
porque vamos, sobre un true inicial
00:26:23
vamos concatenando los and
00:26:26
de que cada char
00:26:28
sea un dígito
00:26:30
¿veis? los vamos
00:26:32
haciendo una concatenación acumulativa
00:26:34
de ands, entonces cuando
00:26:36
alguno ya no sea dígito
00:26:37
este and ya me va a dar
00:26:39
falso, pero si todos fueran
00:26:42
dígitos, todos fueran dígitos
00:26:44
yo a este valid3 inicial true
00:26:45
le estoy concatenando todo el tanto and true
00:26:47
entonces al final sería true
00:26:49
en cuanto uno de estos no sea dígito
00:26:51
este and
00:26:54
concatenado, acumulado, ya va a dar
00:26:56
falso, entonces cuando este for
00:26:58
ha terminado, que este for termina aquí
00:27:00
tengo dos opciones, que valid 3
00:27:02
siga siendo true, porque todo lo que he concatenado
00:27:04
sobre él es true, true, true, true
00:27:06
o que sea falso, porque alguno de los que he concatenado
00:27:07
no fue dígito, entonces
00:27:10
esta ya es la validación 3, luego si pasa
00:27:11
la 1, que es que empiece con raíz
00:27:14
pasa la 2, que acabe con ptr
00:27:15
y pasa la 3, que es que todo lo que
00:27:17
esté entre raíz y ptr sean dígitos
00:27:19
pues entonces ha pasado la total
00:27:21
pues entonces ahora ya le tenemos que devolver
00:27:23
return valid1
00:27:25
and
00:27:27
uy
00:27:30
valid2 and
00:27:31
valid3
00:27:37
este es el método
00:27:40
validar, vale pues
00:27:41
esto es programar en realidad
00:27:45
esto, hacer estas cositas
00:27:47
bueno pues ya
00:27:53
aparentemente tenemos este método de validar
00:27:59
correcto
00:28:01
si el fichero
00:28:02
ahora ya nos podemos ir a nuestro
00:28:05
evento otra vez
00:28:08
que era listamos todos los
00:28:09
ficheros
00:28:13
si son ficheros y validan
00:28:14
los añadimos a la estructura
00:28:17
y ahora ya recorremos la estructura
00:28:19
para irlos leyendo y escribiendo
00:28:21
vamos a probarlo
00:28:23
así de buenas a primeras es un poco
00:28:25
complicado, ahora yo voy a intentar unir
00:28:27
todos esos que hice
00:28:29
Que empezaban con datos
00:28:31
Que empezaban con datos
00:28:33
Pues voy a intentar unir todos estos
00:28:34
A ver si hay suerte
00:28:38
Y no salen errores
00:28:39
Pero bueno, es raro
00:28:41
Que no la hayamos liado en alguna cosa
00:28:43
Venga
00:28:47
Merge, raíz de los ficheros a unir
00:28:50
Datos, ¿no? Se llamaban los míos
00:28:52
Creo, con minúscula
00:28:55
Sí, datos
00:28:56
Datos
00:28:57
Y este
00:29:05
¿Qué te está pasando?
00:29:06
A ver
00:29:16
A ver, vamos a probar esto
00:29:17
Y si eso, me subes tú este
00:29:20
Y lo miro aquí
00:29:22
Venga, datos, los que empiezan por datos
00:29:23
Merge
00:29:25
Nombre de fichero destino
00:29:28
Pues todos
00:29:30
Se va a llamar todos
00:29:32
Y ahora al darle a aceptar
00:29:33
a saber que sale aquí, que pasa aquí
00:29:35
esto ya era mucho
00:29:37
que a la primera no salir era mucho pedir
00:29:40
entonces
00:29:41
nos hemos pasado
00:29:43
datos 5, 4
00:29:48
para length 8
00:29:50
a ver en algún
00:29:51
momento cuando he hecho un substring o algo
00:29:54
de eso
00:29:55
me he pasado
00:29:56
aquí, vamos a ver
00:29:59
vale, hacer la subcadena
00:30:01
pero
00:30:05
datos
00:30:06
si es fichero
00:30:09
ah claro, a ver, es que esta validación
00:30:13
de aquí, solo tiene sentido
00:30:15
que la haga si ha pasado las anteriores
00:30:17
porque si no ha pasado las anteriores
00:30:19
el fichero a lo mejor se llama O
00:30:21
entonces si se llama O, no puedo hacer yo
00:30:23
hacer un substring con 4
00:30:25
con ptr, entonces esta validación 3
00:30:27
solo tiene sentido hacerla
00:30:29
si ya ha pasado la 1 y la 2
00:30:31
si no tiene sentido hacerla
00:30:32
vale, entonces
00:30:34
si
00:30:36
Si no valida
00:30:38
Si no valida la primera
00:30:43
O
00:30:45
No valida la segunda
00:30:46
Ya está, retum falso
00:30:49
Y se acabó
00:30:52
Porque una de las dos
00:30:55
No la ha validado, o la primera o la segunda
00:30:57
Entonces si valida las dos
00:30:59
Ahora ya ha sido
00:31:02
Vale, pues venga
00:31:03
Siguiente intento
00:31:05
Venga, raíz de los ficheros a unir
00:31:14
datos, merge, todos, aceptar, vamos a ver si me ha hecho un todos por ahí, aquí está
00:31:16
mi todos, entonces vamos a ver qué tamaño tiene, que eso ya nos da una pista, 24.926,
00:31:36
todos
00:31:49
a ver
00:31:56
ha unido estos
00:31:57
a ver si yo pudiera
00:32:00
voy a copiarlo y pegarlo
00:32:03
y abrirlo con Word porque esos venían de partir
00:32:05
un Word, entonces
00:32:07
a ver
00:32:08
donde lo tengo
00:32:11
aquí
00:32:28
cambiar nombre
00:32:28
pero los bytes no me suena que estén bien
00:32:32
entonces
00:32:37
vale
00:32:38
no parece el mismo
00:32:44
fichero del que dividí
00:32:47
entonces
00:32:48
repito, ahora que ya hemos entendido la aplicación
00:32:50
hemos visto como hacerla
00:33:01
vamos simplemente a cambiar la clase
00:33:02
file-reader-file-writer por file-input-stream
00:33:05
file-output-stream para que se quede
00:33:07
como la haríamos en original
00:33:09
con esa clase básica que mueve el byte tal cual
00:33:11
porque el fichero puede tener cualquier cosa
00:33:13
no tengo por qué interpretar yo que sea un char
00:33:15
entonces simplemente
00:33:17
voy a cambiar aquí
00:33:18
cada file reader
00:33:20
y cada file writer
00:33:23
claro
00:33:30
lo voy a cambiar por la clase con la que lo haríamos
00:33:32
pero repito que esto lo subo
00:33:34
luego todo por si alguien
00:33:36
file output stream
00:33:38
queda como mejor
00:33:40
no es que quede mejor es que esta
00:33:42
esta clase te lee el byte directamente
00:33:44
sin darle ninguna interpretación
00:33:46
no es como file reader
00:33:48
que asume que es un char
00:33:48
entonces cuando tú haces el casting a char
00:33:51
te muestra algo con sentido
00:33:52
esta te coge el byte
00:33:55
y te lo lleva a la variable
00:33:56
esta de aquí tal cual
00:33:59
pues
00:34:00
en nuestro caso que estamos moviendo bytes
00:34:01
sin ninguna interpretación es como lo haríamos
00:34:05
vale pues entonces
00:34:07
este
00:34:09
se cambia
00:34:10
por inputStream
00:34:13
pues los métodos son iguales
00:34:14
todo es igual
00:34:17
file input string
00:34:17
ala, file output string
00:34:25
vale, esto ya lo tenemos
00:34:32
y ahora
00:34:34
este método de aquí
00:34:37
pues aquí lo mismo
00:34:39
en lugar de file
00:34:45
readder
00:34:48
file input string
00:34:48
y en lugar de file writer
00:34:51
file output string
00:34:54
y todo lo demás
00:34:57
igual
00:34:59
vale
00:35:00
y voy a probar ahora a dividir un word
00:35:17
a ver si luego al reconstruirlo me sale el word
00:35:19
entero otra vez
00:35:21
venga vamos a dividir
00:35:22
un word
00:35:28
cualquiera
00:35:29
este
00:35:30
lo vamos a dividir en
00:35:42
datos
00:35:48
vale
00:35:49
ahora vamos a ver
00:35:51
aquí están todos los datos
00:35:54
los 15 ficheros
00:35:59
y ahora voy a unirlos
00:36:01
a ver si el que me sale
00:36:02
fuera un
00:36:03
si Word lo interpretara, que debería
00:36:05
porque lo hemos movido sin más
00:36:08
vamos a ver
00:36:09
ejecutamos esto otra vez
00:36:11
y le decimos, vamos a hacer un
00:36:14
merg de todos los que se llaman datos
00:36:16
y donde lo vas
00:36:17
a guardar, en resul.docx
00:36:20
por ejemplo
00:36:24
y ya está
00:36:24
vale, entonces
00:36:29
refresh
00:36:31
vale
00:36:33
result doc x está aquí
00:36:37
este
00:36:40
voy a sacarlo fuera
00:36:43
copiar, pegar
00:36:44
hay, mete algún carácter
00:36:54
en algún momento que hace que luego
00:37:01
algún carácter que hace que ya sea elegible
00:37:03
para el Word, no sé muy bien
00:37:05
que
00:37:07
los permisos
00:37:08
no, no, permisos no son algún carácter
00:37:10
en algún momento
00:37:13
pero no debería porque estamos
00:37:14
cogiendo los
00:37:18
estamos, es que los bytes tal cual
00:37:19
los estamos poniendo en trocitos y luego pegándolos otra vez
00:37:23
no debería perder
00:37:25
no sé por qué no lo
00:37:26
no lo sé, se podría
00:37:28
indagar a ver por qué no reconstruye el Word igual
00:37:30
pero a ver, lo que
00:37:33
me importa ahora, bueno, es que hayáis
00:37:34
entendido la aplicación
00:37:37
a ver, un segundito
00:37:39
esto, vamos aquí
00:38:50
vale, pues aquí en el aula
00:38:56
virtual aquí abajo está
00:39:15
está todo lo que hemos hecho respecto a los enunciados anteriores que hay aquí arriba.
00:39:17
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 6
- Fecha:
- 7 de mayo de 2025 - 19:35
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 39′ 45″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 202.39 MBytes