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 i FileOutputStream.
  • 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 i FileOutputStream.
  • Fluxos de Caràcters: S'utilitzen per a la lectura i escriptura de dades de text. Utilitzen classes com FileReader i FileWriter.

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 utilitzant FileInputStream.
  • 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 utilitzant FileOutputStream.
  • 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 utilitzant FileReader.
  • 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 utilitzant FileWriter.
  • 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

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

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

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats