En aquest tema, aprendrem sobre els fluxos de fitxers en Java, que són fonamentals per a la lectura i escriptura de dades en fitxers. Els fluxos de fitxers permeten gestionar la transferència de dades entre el programa i els fitxers del sistema.
Objectius
- Entendre què són els fluxos de fitxers.
- Aprendre a utilitzar
FileInputStream
iFileOutputStream
. - Conèixer les diferències entre fluxos de bytes i fluxos de caràcters.
- Implementar exemples pràctics de lectura i escriptura de fitxers.
Conceptes Clau
Fluxos de Bytes vs Fluxos de Caràcters
- Fluxos de Bytes: S'utilitzen per a la lectura i escriptura de dades binàries. Utilitzen classes com
FileInputStream
iFileOutputStream
. - Fluxos de Caràcters: S'utilitzen per a la lectura i escriptura de dades de text. Utilitzen classes com
FileReader
iFileWriter
.
Classes Principals
- FileInputStream: Permet llegir bytes d'un fitxer.
- FileOutputStream: Permet escriure bytes en un fitxer.
- FileReader: Permet llegir caràcters d'un fitxer.
- FileWriter: Permet escriure caràcters en un fitxer.
Exemples Pràctics
Lectura de Fitxers amb FileInputStream
import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("example.txt")) { int content; while ((content = fis.read()) != -1) { System.out.print((char) content); } } catch (IOException e) { e.printStackTrace(); } } }
Explicació:
- Obrim un fitxer anomenat
example.txt
utilitzantFileInputStream
. - Llegim el contingut del fitxer byte a byte.
- Convertim cada byte a un caràcter i el mostrem per pantalla.
- Utilitzem un bloc
try-with-resources
per assegurar-nos que el flux es tanca automàticament.
Escriptura de Fitxers amb FileOutputStream
import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamExample { public static void main(String[] args) { String data = "Això és un exemple d'escriptura en un fitxer."; try (FileOutputStream fos = new FileOutputStream("output.txt")) { fos.write(data.getBytes()); } catch (IOException e) { e.printStackTrace(); } } }
Explicació:
- Obrim o creem un fitxer anomenat
output.txt
utilitzantFileOutputStream
. - Convertim la cadena de text a un array de bytes.
- Escrivim l'array de bytes en el fitxer.
- Utilitzem un bloc
try-with-resources
per assegurar-nos que el flux es tanca automàticament.
Lectura de Fitxers amb FileReader
import java.io.FileReader; import java.io.IOException; public class FileReaderExample { public static void main(String[] args) { try (FileReader fr = new FileReader("example.txt")) { int content; while ((content = fr.read()) != -1) { System.out.print((char) content); } } catch (IOException e) { e.printStackTrace(); } } }
Explicació:
- Obrim un fitxer anomenat
example.txt
utilitzantFileReader
. - Llegim el contingut del fitxer caràcter a caràcter.
- Mostrem cada caràcter per pantalla.
- Utilitzem un bloc
try-with-resources
per assegurar-nos que el flux es tanca automàticament.
Escriptura de Fitxers amb FileWriter
import java.io.FileWriter; import java.io.IOException; public class FileWriterExample { public static void main(String[] args) { String data = "Això és un exemple d'escriptura en un fitxer."; try (FileWriter fw = new FileWriter("output.txt")) { fw.write(data); } catch (IOException e) { e.printStackTrace(); } } }
Explicació:
- Obrim o creem un fitxer anomenat
output.txt
utilitzantFileWriter
. - Escrivim la cadena de text directament en el fitxer.
- Utilitzem un bloc
try-with-resources
per assegurar-nos que el flux es tanca automàticament.
Exercicis Pràctics
Exercici 1: Lectura de Fitxers
Crea un programa que llegeixi el contingut d'un fitxer anomenat input.txt
i mostri el seu contingut per pantalla.
Exercici 2: Escriptura de Fitxers
Crea un programa que escrigui la frase "Hola, món!" en un fitxer anomenat hello.txt
.
Exercici 3: Copia de Fitxers
Crea un programa que copiï el contingut d'un fitxer anomenat source.txt
a un altre fitxer anomenat destination.txt
.
Solucions:
Solució Exercici 1
import java.io.FileInputStream; import java.io.IOException; public class ReadFile { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("input.txt")) { int content; while ((content = fis.read()) != -1) { System.out.print((char) content); } } catch (IOException e) { e.printStackTrace(); } } }
Solució Exercici 2
import java.io.FileOutputStream; import java.io.IOException; public class WriteFile { public static void main(String[] args) { String data = "Hola, món!"; try (FileOutputStream fos = new FileOutputStream("hello.txt")) { fos.write(data.getBytes()); } catch (IOException e) { e.printStackTrace(); } } }
Solució Exercici 3
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyFile { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("destination.txt")) { int content; while ((content = fis.read()) != -1) { fos.write(content); } } catch (IOException e) { e.printStackTrace(); } } }
Resum
En aquest tema, hem après sobre els fluxos de fitxers en Java, incloent-hi la lectura i escriptura de fitxers utilitzant FileInputStream
, FileOutputStream
, FileReader
i FileWriter
. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per avançar cap a temes més avançats en la gestió de fitxers.
Curs de Programació en Java
Mòdul 1: Introducció a Java
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
Mòdul 4: Programació Orientada a Objectes Avançada
Mòdul 5: Estructures de Dades i Col·leccions
Mòdul 6: Gestió d'Excepcions
Mòdul 7: Entrada/Sortida de Fitxers
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection