Tots els arxius d’entrada existeixen dins de Documentos/ (provinent de Documentos.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:

  1. Obrir el fitxer d’entrada com a binari i el de sortida també com a binari.
  2. Llegir i escriure en blocs (no byte a byte) fins a arribar al final.
  3. Mostrar per pantalla el total de bytes copiats.
  4. 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:

  1. Llegir el fitxer en blocs de bytes.
  2. Per a cada byte llegit, convertir-lo a enter sense signe (0..255) i actualitzar min, max i suma.
  3. Al final, mostrar nombre total de bytes, mínim, màxim i mitjana.
  4. 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:

  1. Obrir dos fluxos d’entrada binaris i un de sortida binari.
  2. Abocar completament el primer a l’eixida en blocs, després el segon.
  3. Mostrar un missatge final indicant el camí del fitxer generat.
  4. 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:

  1. Llegir el fitxer per línies.
  2. Escriure cada línia prefixada amb el número de línia (p. ex. 0001 | …) i un salt de línia portàtil.
  3. Indicar explícitament UTF-8 tant en lectura com en escriptura.
  4. 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:

  1. Llegir totes les línies a una ArrayList<String>.
  2. Ordenar-les ignorant majúscules/minúscules.
  3. Escriure-les al fitxer d’eixida, una per línia.
  4. 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:

  1. Crear la carpeta Documentos/Diccionario/ si no existeix.
  2. Llegir per línies el diccionari (saltant buides).
  3. Decidir la lletra inicial (passant-la a majúscula); si està entre A i Z, escriure la paraula al fitxer corresponent i afegir un salt de línia portàtil.
  4. Indicar UTF-8 en lectura i escriptura. Tancar tots els recursos.

Pistes per triar els fluxos:

  • TextreadLine() / 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.