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
FileInputStreamiFileOutputStream. - 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
FileInputStreamiFileOutputStream. - Fluxos de Caràcters: S'utilitzen per a la lectura i escriptura de dades de text. Utilitzen classes com
FileReaderiFileWriter.
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.txtutilitzantFileInputStream. - 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-resourcesper 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.txtutilitzantFileOutputStream. - Convertim la cadena de text a un array de bytes.
- Escrivim l'array de bytes en el fitxer.
- Utilitzem un bloc
try-with-resourcesper 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.txtutilitzantFileReader. - Llegim el contingut del fitxer caràcter a caràcter.
- Mostrem cada caràcter per pantalla.
- Utilitzem un bloc
try-with-resourcesper 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.txtutilitzantFileWriter. - Escrivim la cadena de text directament en el fitxer.
- Utilitzem un bloc
try-with-resourcesper 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
