Programas sobre ficheros

Programas para tratar ficheros: leer, escribir, ver sus propiedades, etc.

Descarga de todos los ejercicios: ficheros_unidad7

Leer el contenido de un fichero:

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

class EjemploFichero01 {
    // debe existir el fichero malaga.txt y estar situado en la misma carpeta que el este programa para poder leerlo
    public static final String FICHERO = "malaga.txt";
    public static void main(String[] args) {
        BufferedReader br = null;
        String linea = "";
        try {
            br = new BufferedReader(new FileReader(FICHERO));        
            while (linea != null) {
                System.out.println(linea);
                linea = br.readLine();                
            }

        } catch (FileNotFoundException fnfe) { // qué hacer si no se encuentra el fichero
            System.out.println("No se encuentra el fichero malaga.txt: " + fnfe.getMessage());
        } catch (IOException ioe) { // qué hacer si hay un error en la lectura del fichero
            System.out.println("No se puede leer el fichero: "  + ioe.getMessage());
        } finally {
            if (br != null)
                try {
                    br.close();
                } catch (IOException ex) {
                    System.out.println("Error al cerrar el fichero: " + ex.getMessage());
                }
        }
    }
}

Fichero malaga.txt

un ejemplo de fichero
málaga es muy bonita
y tiene playa

Escribir en un fichero:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

class EjemploFichero02 {
    public static final String FICHERO = "fruta.txt";
    public static void main(String[] args) {
    
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(FICHERO));
            // Para añadir el texto al final del fichero, usamos otro constructor
            //BufferedWriter bw = new BufferedWriter(new FileWriter(FICHERO, true));
            bw.write("naranja\n");
            bw.write("mango\n");
            bw.write("chirimoya\n");
            bw.flush();
            bw.close();
            System.out.println("Texto añadido al fichero: " + FICHERO);
        } catch (IOException ioe) {
            System.out.println("No se ha podido escribir en el fichero: " + ioe.getMessage());
        }
    }
}

Combinar el contenido de dos ficheros en uno nuevo:

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

/**
 * Ejemplo de uso de la clase File para mezclar dos ficheros
 *
 * @author Luis José Sánchez
 */
class EjemploFichero03 {
    public static void main(String[] args) {
        try {
            BufferedReader br1 = new BufferedReader(new FileReader("fichero1.txt"));
            BufferedReader br2 = new BufferedReader(new FileReader("fichero2.txt"));
            BufferedWriter bw = new BufferedWriter(new FileWriter("mezcla.txt"));
            String linea1 = "";
            String linea2 = "";
            while ((linea1 != null) || (linea2 != null)) {
                linea1 = br1.readLine();
                linea2 = br2.readLine();
                if (linea1 != null) {
                    bw.write(linea1 + "\n");
                }
                if (linea2 != null) {
                    bw.write(linea2 + "\n");
                }
            }
            br1.close();
            br2.close();
            bw.close();
            System.out.println("Archivo mezcla.txt creado satisfactoriamente.");
        } catch (IOException ioe) {
            System.out.println("Se ha producido un error de lectura/escritura");
            System.err.println(ioe.getMessage());
        }
    }
}

Ver las propiedades de los ficheros y carpetas en el directorio actual:

import java.io.File;

/**
 * Ejemplo de uso de la clase File: Listado de los archivos del directorio actual
 *
 * @author Luis José Sánchez
 */
class EjemploFichero04 {
    public static void main(String[] args) {
        File f = new File("."); // se indica la ruta entre comillas
        // el punto (.) es el directorio actual
        String[] listaArchivos = f.list();
        // for (int i = 0; i < listaArchivos.length; i ++) {
        //    System.out.println(listaArchivos[i]);
        // }
        // System.out.println("__________________________");
        for (String nombreArchivo : listaArchivos) {
            // System.out.println(nombreArchivo);
            File fichero = new File(nombreArchivo);
            if (fichero.isFile()) {
                System.out.println("Fichero: " + nombreArchivo + "____" + fichero.length());
            } else {
                System.out.println("Carpeta: " + nombreArchivo);                
            }
        }
    }
}

Leer del fichero dato.txt un número n y almacenar en el fichero primos.dat todos los números primos entre 2 y n:

Seudocódigo:

- Crear previamente el archivo dato.txt con un número entero
- Leer el archivo
- Convertir el texto leído a un número entero n
- Realizar un bucle de i desde 2 hasta n
    Calcular si i es primo
    Si i es primo, guardarlo en el archivo
- Cerrar los flujos a los archivos de lectura y escritura

Fichero dato.txt

100

Código:

/**
 * 1. Escribe un programa que guarde en un fichero con nombre primos.dat 
 *    los números primos que hay entre 2 y el número leído en dato.txt.
 */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class EjemploFichero05 {
    public static final String LECTURA = "dato.txt";
    public static final String ESCRITURA = "primos.dat";
    public static void main(String[] args) {
        BufferedReader br = null;
        BufferedWriter bw = null;
        int numero;

        try {
            // leer el número del fichero
            br = new BufferedReader(new FileReader(LECTURA));
            numero =Integer.parseInt(br.readLine());

            // calcular los números primos y escribirlos en el fichero
            bw = new BufferedWriter(new FileWriter(ESCRITURA));
            for (int i = 2; i <= numero; i ++) {                
                if (esPrimo(i)) {
                    bw.write(String.valueOf(i) + "\n");
                }
            }
            System.out.println("Números primos escritos en el fichero: " + ESCRITURA);

        } catch (NumberFormatException nfe){
            System.out.println("Error al convertir el número leído del fichero: " + nfe.getMessage());
        } catch (IOException ioe) {
            System.out.println("Error de lectura/escritura en un fichero: " + ioe.getMessage());
        } finally {
            try {
                if (br != null)
                    br.close();
                if (bw != null) {
                    bw.flush();
                    bw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("Error al cerrar el flujo: " + e.getMessage());
            }            
        }
    }

     // Devuelve verdadero si el número que se pasa como parámetro es primo y falso en caso contrario.
    public static boolean esPrimo(int x) {
        boolean primo = true;
        for (int i = 2; i <= Math.sqrt(x) && primo; i ++) {
            if ((x % i) == 0) {
                primo = false;
            }
        }
        return primo;
    }
}

Obtener los nombres y tamaños de los archivos situados en la misma carpeta del programa y en las subcarpetas existentes:

import java.io.File;

class EjemploFichero06 {
    public static void main(String[] args) {
        long tamano;
        String mensaje;
        File carpeta = new File("."); // se indica la ruta entre comillas
        // el punto (.) es el directorio actual

        String[] listaArchivos = carpeta.list();
        for (String nombreArchivo : listaArchivos) {
            File subcarpeta = new File(nombreArchivo);
            mensaje = nombreArchivo;
            if (subcarpeta.isFile()) {
                tamano= subcarpeta.length();
                mensaje +=  ", " + tamano + " bytes";
            }
            System.out.println(mensaje);            
            if (subcarpeta.isDirectory()) {
                    String[] listaSubcarpeta = subcarpeta.list();
                    for (String lista : listaSubcarpeta) {
                        System.out.println("\t" + lista);                                          
                    }
            }
        }
    }
}

Escribir objetos en un fichero:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Serial1 {
    public static final String SALIDA = "personas.dat";

    public static void main(String[] args) {

        FileOutputStream fos = null;
        ObjectOutputStream salida = null;
        Persona p;

        try {
            //Se crea el fichero
            fos = new FileOutputStream(SALIDA);
            salida = new ObjectOutputStream(fos);
            
            //Se crea el primer objeto Persona
            p = new Persona("12345678A","Lucas González", 30);
            //Se escribe el objeto en el fichero
            salida.writeObject(p);
            
            //Se crea el segundo objeto Persona
            p = new Persona("98765432B","Anacleto Jiménez", 28);
            //Se escribe el objeto en el fichero
            salida.writeObject(p);
            
            //Se crea el tercer objeto Persona
            p = new Persona("78234212Z","María Zapata", 35);
            //Se escribe el objeto en el fichero
            salida.writeObject(p);
            
            System.out.println("Fichero creado: " + SALIDA);
           
        } catch (FileNotFoundException e) {
            System.out.println("FNFException: " + e.getMessage());                        
        } catch (IOException e) {
            System.out.println("IOException: " + e.getMessage());
        } finally {
            try {
                // if(fos!=null) fos.close();
                if (salida != null) 
                    salida.close();
            } catch (IOException e) {
                System.out.println("IOException: "+e.getMessage());
            }
        }

    }
}

Leer objetos de un fichero:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class Serial2 {
    public static final String ENTRADA = "personas.dat";
    public static void main(String[] args) {

        FileInputStream fis = null;
        ObjectInputStream entrada = null;
        Persona p;

        try {
            fis = new FileInputStream(ENTRADA);
            entrada = new ObjectInputStream(fis);

            while (fis.available() > 0) { // check if the file stream is at the end
                p = (Persona) entrada.readObject();
                System.out.println(p.getNif() + ", " + p.getNombre() + ", " + p.getEdad());
            }
            /*
            p = (Persona) entrada.readObject(); //es necesario el casting
            System.out.println(p.getNif() + ", " + p.getNombre() + ", " + p.getEdad());

            p = (Persona) entrada.readObject();
            System.out.println(p.getNif() + ", " + p.getNombre() + ", " + p.getEdad());

            p = (Persona) entrada.readObject();
            System.out.println(p.getNif() + ", " + p.getNombre() + ", " + p.getEdad());
            */         
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                // if (fis != null) fis.close();
                if (entrada != null) {
                    entrada.close();
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }

    }
}

 

 

 

Deja una respuesta