En aquest tema, aprendrem com llegir fitxers en Java utilitzant diverses classes i mètodes proporcionats per la biblioteca estàndard de Java. La lectura de fitxers és una operació comuna en moltes aplicacions, ja que permet obtenir dades des d'arxius externs per processar-les o analitzar-les.

Objectius

  • Comprendre com utilitzar la classe FileReader per llegir fitxers de text.
  • Aprendre a utilitzar la classe BufferedReader per millorar l'eficiència de la lectura de fitxers.
  • Gestionar excepcions relacionades amb la lectura de fitxers.

  1. Utilitzant FileReader

La classe FileReader és una classe simple que permet llegir caràcters d'un fitxer. Aquí teniu un exemple bàsic de com utilitzar FileReader per llegir un fitxer de text.

Exemple

import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
    public static void main(String[] args) {
        try {
            FileReader reader = new FileReader("example.txt");
            int character;
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicació

  • Importació de classes: Importem FileReader i IOException de la biblioteca java.io.
  • Creació de FileReader: Creem una instància de FileReader passant el nom del fitxer que volem llegir.
  • Lectura de caràcters: Utilitzem el mètode read() per llegir caràcter a caràcter fins que arribem al final del fitxer (indicat per -1).
  • Tancament del fitxer: Tanquem el fitxer utilitzant el mètode close() per alliberar els recursos.

  1. Utilitzant BufferedReader

La classe BufferedReader s'utilitza per millorar l'eficiència de la lectura de fitxers, ja que llegeix blocs de caràcters en lloc de caràcter a caràcter. Això pot ser especialment útil per a fitxers grans.

Exemple

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicació

  • Creació de BufferedReader: Creem una instància de BufferedReader passant una instància de FileReader.
  • Lectura de línies: Utilitzem el mètode readLine() per llegir línia a línia fins que arribem al final del fitxer (indicat per null).
  • Tancament del fitxer: Tanquem el fitxer utilitzant el mètode close().

  1. Gestió d'Excepcions

Quan treballem amb fitxers, és important gestionar les possibles excepcions que poden ocórrer, com ara fitxers que no existeixen o problemes de lectura/escriptura. En els exemples anteriors, utilitzem un bloc try-catch per capturar i gestionar IOException.

Exemple amb gestió d'excepcions

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("Error llegint el fitxer: " + e.getMessage());
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                System.err.println("Error tancant el fitxer: " + e.getMessage());
            }
        }
    }
}

Explicació

  • Blocs try-catch-finally: Utilitzem un bloc try-catch-finally per assegurar-nos que el fitxer es tanca correctament fins i tot si es produeix una excepció.
  • Gestió d'excepcions: Capturem IOException i imprimim un missatge d'error.

Exercicis Pràctics

Exercici 1

Crea un programa que llegeixi un fitxer de text i compti el nombre de línies que conté.

Solució

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LineCountExample {
    public static void main(String[] args) {
        int lineCount = 0;
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            while (reader.readLine() != null) {
                lineCount++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Nombre de línies: " + lineCount);
    }
}

Exercici 2

Crea un programa que llegeixi un fitxer de text i compti el nombre de paraules que conté.

Solució

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class WordCountExample {
    public static void main(String[] args) {
        int wordCount = 0;
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] words = line.split("\\s+");
                wordCount += words.length;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Nombre de paraules: " + wordCount);
    }
}

Resum

En aquest tema, hem après com llegir fitxers en Java utilitzant les classes FileReader i BufferedReader. També hem vist com gestionar excepcions relacionades amb la lectura de fitxers. A més, hem practicat amb exercicis per comptar línies i paraules en un fitxer de text. En el proper tema, explorarem com escriure fitxers en Java.

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