E/S para Ficheros de Texto en Java

/* Se muestran varios ejemplos de manejo de flujos sobre ficheros de texto en Java: contenido, árbol y rutas de carpetas y ficheros, cambio de nombre del flujo/fichero, chequeo de privilegios, lectura y escritura en ficheros de texto con control de excepciones */

package primerosejemplosflujos;

import java.io.*;
import java.util.Scanner;

public class PracticaFile {
/*
 * @authors ARF, RLR
 */
    public static void main(String[] args) throws IOException {
        
        Scanner miTeclado = new Scanner(System.in);

        System.out.print("Intro. nombre fich. o carpeta (ej. c:/usuarios): ");
        String s = miTeclado.next();

        /* Se crea un objeto File que representa ese nombre de fichero o carpeta
         * y se comprueba si dicho fichero o carpeta existe realmente. En caso
         * de que exista se muestran en pantalla algunas de sus propiedades.
         */
        File f = new File(s);
        if(f.exists()) {
            propiedadesFile(f, 0);
        } else {
            System.out.println("El fichero/carpeta " + f.getName() +
                    " NO existe o no se encontro.");
        }
        
        /* Se lee nombre de otro fichero y si no existe, se renombra el primer
         * fichero con este nuevo nombre. Se comprueba el cambio.
         */
        //String s1 = miTeclado.nextLine();
        System.out.print("Intro. nombre de otro fichero: ");
        String s1 = miTeclado.next();
        System.out.println("New file: " + s1);
        File f1 = new File(s1);
        System.out.println("Cambiando nombre de fichero: ");
        f.renameTo(f1);
        System.out.println("Ahora se llama " + f1.getName());
        if(f1.exists()) {
            propiedadesFile(f1, 0); 
        } else {
            System.out.println("El fichero/carpeta " + f1.getName() +
                    " NO existe o no se encontro.");
        }
        if(f.exists()) {
            propiedadesFile(f, 0);
        } else {
            System.out.println("El fichero/carpeta " + f.getName() +
                    " NO existe o no se encontro.");
        }
        
        /* Bucle que lee y recopia texto dado por teclado.
         */
        
        System.out.println("DAME TEXTO PARA SACAR EN PANTALLA: ");
        s = miTeclado.nextLine();
        while(!s.equals("."))
        {
            System.out.println(s);
            s = miTeclado.nextLine();            
        }
        System.out.println("");
        
         /* Abrir fichero creado y añadir texto en el mismo desde teclado.
         *  Controlar el proceso con try/catch
         */
        // Comprobar su existencia
        System.out.print("Intro. nombre fichero para leer: ");
        s = miTeclado.next();
        f = new File(s);        
        if(f.exists()) 
            System.out.println("HOLA: FICHERO EXISTE.");
        System.out.println("");
        
        // Hacemos su lectura
        FileReader entrada = new FileReader(f); 
        try
        {
        int n;        
        while((n=entrada.read())!=-1)
            System.out.print((char)n);
        }
        catch(IOException e)
        {
            System.err.println("ERROR I/O CON FICHERO");
        }
        System.out.println("");
        entrada.close();
        
        
        //Leemos texto de teclado y volcamos en fichero
        System.out.println("DAME TEXTO PARA AÑADIR A FICHERO: ");
        s = miTeclado.nextLine();
        
        //try{
        
        //FileWriter out = new FileWriter(f,true);
        BufferedWriter out = new BufferedWriter(new FileWriter(f,true));   
        try
        {                              
            while(!s.equals("."))
            {
                out.write(s);
                //out.write("\n");
                out.newLine();
                s = miTeclado.nextLine();            
            }
        }
        catch(IOException e)
        {
            System.err.println("ERROR I/O CON FICHERO");
        }
        finally
        {
            out.close();
        }
        
        //}catch(FileNotFoundException e){System.err.println("ERROR-ERROR");}
        System.out.println("");                          
     
        
        System.out.println("FIN-FIN");
        System.out.println("\n\nPulsa Tecla+Return para acabar.\n");
        String FIN=miTeclado.next();
        
        //out.close();
        
    }

    //El siguiente método ilustra el trabajo de algunos métodos de la clase
    //File. Notar que se trata de un método recursivo: si el parámetro f
    //se refiere a un fichero se muestran en pantalla algunos datos de él;
    //pero si es una carpeta, además de mostrar sus datos, muestra información
    //de todos los ficheros que contiene y de sus 'subcarpetas' recursivamente.
    public static void propiedadesFile(File f, int n) {
        File[] listaFich;

        //Se escriben n espacios en blanco en una linea
        for(int i=0; i<n; i++) System.out.print(" ");

        //Se indica si f es una carpeta o un fichero. En el primer caso
        //se obtiene la lista de ficheros y subcarpetas que contiene.
        if (f.isDirectory()) {
            System.out.print("CARPETA:  ");
            listaFich = f.listFiles();
        } else {
            System.out.print("FICHERO:  ");
            listaFich = new File[0];
        }

        //Se muestra en la pantalla la ruta del fichero o carpeta f desde
        //el comienzo de la unidad (ej. 'c:/usuarios/...')
        System.out.print(f.getAbsolutePath());

        //Se indica si el fichero o carpeta puede ser leido/escrito
        System.out.print("  lectura: " + siOno(f.canRead()));
        System.out.println("  escritura: " + siOno(f.canWrite()));

        //Si f es una carpeta se muestran, recursivamente, datos de los
        //ficheros y subcarpetas que contiene.
        for(int i=0; i<listaFich.length; i++) {
            propiedadesFile(listaFich[i], n+2);
        }
    }

    //Este método escribe 'SI' en la pantalla si el parámetro booleano es true
    //y 'NO' si es false
    public static String siOno(boolean b) {
        if(b) return("SI");
        else return("NO");
    }

}

Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s