Tots els arxius d’entrada existeixen dins de
Documentos/
(provinent deDocumentos.zip
).
Exercicis Streams Binaris
Exercici 1. Còpia binària en blocs amb recompte
Objectiu: copiar un fitxer gran tal qual i comptar quants bytes s’han copiat. Fitxers: entrada Documentos/pi-million.txt
→ eixida Documentos/pi-million.copy
Què s’ha de fer:
- Obrir el fitxer d’entrada com a binari i el de sortida també com a binari.
- Llegir i escriure en blocs (no byte a byte) fins a arribar al final.
- Mostrar per pantalla el total de bytes copiats.
- Tancar correctament els fluxos (idealment amb try-with-resources).
Pistes per triar els fluxos:
- És binari: no hi ha cap conversió d’encoding.
- Per rendiment, té sentit afegir un buffer i usar els mètodes de bloc (
read(byte[])
,write(byte[], off, len)
). - No cal
charset
; no uses lectors/escriptors de text.
REGEX Validat
String regex = “(?<=@)[A-Za-z0-9.-]+\.[A-Za-z]{2,}”;
Exercici 2. Estadístiques de bytes (mínim, màxim i mitjana)
Objectiu: calcular mínim, màxim i mitjana dels valors byte (0..255) d’un fitxer. Fitxer: Documentos/pi-million.txt
(tracta’l com a binari) Què s’ha de fer:
- Llegir el fitxer en blocs de bytes.
- Per a cada byte llegit, convertir-lo a enter sense signe (0..255) i actualitzar min, max i suma.
- Al final, mostrar nombre total de bytes, mínim, màxim i mitjana.
- Tancar recursos amb try-with-resources.
Pistes per triar els fluxos:
- Binari pur; cap conversió.
- Buffer per reduir crides a disc.
- Practica
read(byte[])
i el càlcul sobre el buffer llegit.
Exercici 3. Concatenació de fitxers binaris
Objectiu: concatenar dos fitxers (en l’ordre donat) dins d’un tercer. Fitxers: entrades Documentos/pi-million.txt
i Documentos/diccionario.txt
→ eixida Documentos/concat.bin
Què s’ha de fer:
- Obrir dos fluxos d’entrada binaris i un de sortida binari.
- Abocar completament el primer a l’eixida en blocs, després el segon.
- Mostrar un missatge final indicant el camí del fitxer generat.
- Tancar en cascada (només el de fora si has apilat decoradors).
Pistes per triar els fluxos:
- Tractament binari (sense
charset
). - Té sentit reutilitzar el mateix buffer per a tots dos abocats.
- Practica l’esquema llegir→escriure en blocs i el tancament automàtic.
Exercicis Streams de Caràcters
Exercici 4. Numerar línies d’un fitxer de text (UTF-8)
Objectiu: llegir un fitxer de text, numerar cada línia i guardar-ho en un altre. Fitxers: entrada Documentos/frases.txt
→ eixida Documentos/frases_numeradas.txt
Què s’ha de fer:
- Llegir el fitxer per línies.
- Escriure cada línia prefixada amb el número de línia (p. ex.
0001 | …
) i un salt de línia portàtil. - Indicar explícitament UTF-8 tant en lectura com en escriptura.
- Tancar amb try-with-resources.
Pistes per triar els fluxos:
- És text → usa fluxos de caràcters i
readLine()
. - Com que vols controlar l’encoding, passa pel “pont” bytes↔caràcters i indica UTF-8.
- Un buffer millora rendiment i dona
readLine()
/newLine()
.
Exercici 5. Ordenar noms (ignorant majúscules/minúscules) i guardar
Objectiu: ordenar alfabèticament (sense distingir maj/min) les línies d’un fitxer i guardar-les. Fitxers: entrada Documentos/usa_personas.txt
→ eixida Documentos/usa_personas_sorted.txt
Què s’ha de fer:
- Llegir totes les línies a una
ArrayList<String>
. - Ordenar-les ignorant majúscules/minúscules.
- Escriure-les al fitxer d’eixida, una per línia.
- Indicar UTF-8 i usar try-with-resources.
Pistes per triar els fluxos:
- Text i operació línia a línia → fluxos de caràcters amb
readLine()
/newLine()
. - Charset explícit per evitar problemes d’accents.
- Estructura senzilla: ArrayList + sort.
Exercici 6. Diccionari: separar per lletra inicial (A..Z)
Objectiu: crear una carpeta Documentos/Diccionario/
i generar un fitxer per a cada lletra amb les paraules que comencen per ella. Fitxers: entrada Documentos/diccionario.txt
→ eixides Documentos/Diccionario/A.txt
, B.txt
, …, Z.txt
Què s’ha de fer:
- Crear la carpeta
Documentos/Diccionario/
si no existeix. - Llegir per línies el diccionari (saltant buides).
- Decidir la lletra inicial (passant-la a majúscula); si està entre
A
iZ
, escriure la paraula al fitxer corresponent i afegir un salt de línia portàtil. - Indicar UTF-8 en lectura i escriptura. Tancar tots els recursos.
Pistes per triar els fluxos:
- Text →
readLine()
/newLine()
+ charset explícit. - Necessitaràs diversos escriptors simultanis (un per lletra) o obrir/tancar al vol; en ambdós casos, cuida el tancament.
- Un buffer per fitxer millora rendiment.