Java leer ficheros del directorio – Java I/O

Vamos a seguir descubriendo métodos básicos de Java I/O, en este caso crearemos un método para explicar como leer todos los ficheros del directorio que se indique en Java, creamos un paquete org.xulescode.javaio para nuestra clase que llamaremos JavaIOUtils, clase que estoy utilizando en las explicaciones de nuevas funcionalidades de Java I/O, aquí iremos añadiendo para darles utilizad en futuros ejemplos.

Java leer ficheros

Usamos la clase java.io.File que nos proporciona una representación abstracta de un fichero o directorio, con métodos para el manejo de ficheros y directorios.Código Xules

 
Creamos el método public boolean readFolderFiles(String folder) donde implementamos la funcionalidad de Java leer ficheros, usando:

  • Usamos el paquete java.io: donde se encuentran la mayor parte de las clases para el manejo de archivos
  • Usamos java.io.File: representación abstracta de un fichero o el nombre de una ruta, aquí encontraremos los métodos para saber si existe el directorio que nos pasan en la ruta, y también, un método para leer los ficheros del directorio.


Este el código:

package org.xulescode.javaio;

import java.io.File;
import java.io.IOException;

/**
 * Utility class, where we will create methods for training in the use of files,
 * ultimately, Java I / O Basic. 
 * Clase de utilidades, donde crearemos métodos
 * para el aprendizaje del manejo de ficheros, en definitiva, Java I/O Básico.
 *
 * @author xulescode You can follow me on my website http://www.codigoxules.org/en
 * Puedes seguirme en mi web http://www.codigoxules.org).
 */
public class JavaIOUtils {

    /**
     * Explanation of the method by which we read the folder we pass as
     * parameter if exists, returning true in this case and false if not.
     * Explicación del método con el que leemos la carpeta que pasamos como
     * parámetro si existe, devolviendo true si existe y false si no existe.
     * <h3>Example (Ejemplo)</h3>
     * <pre>
     *      JavaIOUtils javaIOUtils = new JavaIOUtils();
     *      javaIOUtils.readFolderFiles("/home/xules/codigoxules");
     * </pre>
     *
     * @param folder <code>String</code> ruta donde vamos a crear el fichero.
     * @return <code>boolean</code> devolvemos true si la carpeta que se pasa
     * para leer .
     */
    public boolean readFolderFiles(String folder) {
        boolean resultado;
        File folderFile = new File(folder);
        if ((resultado = folderFile.exists())) {
            File[] files = folderFile.listFiles();
            for (File file : files) {
                boolean isFolder = file.isDirectory();
                System.out.println((isFolder ? "FOLDER: " : "  FILE: ") + file.getName());
            }
        }
        return resultado;
    }
    /**
     * Main method for the tests for the created method, pruebas de <strong>Java
     * read folder</strong>. Método main para las pruebas para el método creado,
     * pruebas de <strong>Java leer carpeta</strong>.
     *
     * @param args
     */
    public static void main(String args[]) {
        // First example (Primer ejemplo)
        JavaIOUtils javaIOUtils = new JavaIOUtils();
        javaIOUtils.readFolderFiles("/home/xules/codigoxules");
    }
}

 
Este el resultado de la consola para Java leer ficheros del directorio:

run:
FOLDER: LP-5-INSERT-UPDATE-DELETE
  FILE: myfile.txt
  FILE: Mariadb-seal-shaded-browntext.png
  FILE: LPMysql-Netbeans-Conexion-al-Servidor.png
  FILE: customerdb_data_general-001.sql
  FILE: Mariadb-seal-shaded-browntext-alt.png
BUILD SUCCESSFUL (total time: 0 seconds)

Java leer ficheros del directorio y escribir sus nombres en un fichero

Vamos a profundizar un poquito más con un ejemplo sencillo, que consiste, en añadir un par de parámetros más al método public boolean readFolderFiles(String folder) creado anteriormente, para indicar con el primer parámetro que añadimos si queremos listar ficheros y directorios o solo ficheros, en el segundo pasaremos el PrintStream por donde daremos salida a nuestra lectura del directorio, en el ejemplo anterior ya habíamos utilizado la consola con System.out que es un PrintStream, esta es su definición: “Un PrintStream añade funcionalidad a otros canales de salida (output stream), dándole la habilidad para imprimir la representación de varios tipos de datos de forma correcta” (Class PrintStream), con lo que si definimos con nuestra salida por ejemplo un fichero obtendremos un método con el que podremos exportar los datos a un fichero o imprimirlos por pantalla.
Este es el código, fíjate que hemos modificado el método anterior para que llame al nuevo, y conservando su funcionalidad, también añadimos el método de Java crear archivo creado en la primera publicación de Java I/O:

package org.xulescode.javaio;

import java.io.File;
import java.io.IOException;

import java.io.FileNotFoundException;
import java.io.PrintStream;


/**
 * Utility class, where we will create methods for training in the use of files,
 * ultimately, Java I / O Basic. 
 * Clase de utilidades, donde crearemos métodos
 * para el aprendizaje del manejo de ficheros, en definitiva, Java I/O Básico.
 *
 * @author xulescode You can follow me on my website http://www.codigoxules.org/en
 * Puedes seguirme en mi web http://www.codigoxules.org).
 */
public class JavaIOUtils {

    /**
     * Explanation of the method by which we create a file if it does not exist,
     * returns true if created and false if not created. Explicación del método
     * con el que creamos un fichero si no existe, devolviendo true si se crea y
     * false si no se crea.
     * <h3>Example (Ejemplo)</h3>
     * <pre>
     *      boolean result = javaIOUtils.createFile("/home/xules/JavaIO", "myfile.txt");
     *      System.out.println("Result of file creation (Resultado de la creación del fichero): " + result);
     * </pre>
     *
     * @param filePath <code>String</code> ruta donde vamos a crear el fichero.
     * @param fileName <code>String</code> nombre del fichero que queremos crear
     * con la extensión
     * @return <code>boolean</code> true si crea el fichero, false si ya existe
     * o sino se puede crear.
     */
    public boolean createFile(String filePath, String fileName) {
        boolean result;
        File newFile = new File(filePath, fileName);
        if ((result = !newFile.exists())) {
            try {
                result = newFile.createNewFile();
            } catch (IOException ex) {
                result = false;
                System.out.println("File create exception (Excepción al crear el fichero): \n     " + ex);
            }
        }
        return result;
    }


    /**
     * Explanation of the method by which we read the folder we pass as
     * parameter if exists, returning true in this case and false if not.
     * Explicación del método con el que leemos la carpeta que pasamos como
     * parámetro si existe, devolviendo true si existe y false si no existe.
     * <h3>Example (Ejemplo)</h3>
     * <pre>
     *      JavaIOUtils javaIOUtils = new JavaIOUtils();
     *      javaIOUtils.readFolderFiles("/home/xules/codigoxules");
     * </pre>
     *
     * @param folder <code>String</code> 
     *      path where we are going to read the files. 
     *      Ruta donde vamos a leer los ficheros.
     * @return <code>boolean</code> 
     *      we return true if the directory that we pass for read exists.
     *      Devolvemos true si existe el directorio que se pasa para leer.
     */
    public boolean readFolderFiles(String folder) {
       return readFolderFiles(folder, false, System.out);
    }
    /**
     *
     * @param folder <code>String</code> 
     *      path where we are going to read the files. 
     *      Ruta donde vamos a leer los ficheros.
     * @param onlyFiles
     * @param output
     * @return <code>boolean</code> 
     *      we return true if the directory that we pass for read exists.
     *      Devolvemos true si existe el directorio que se pasa para leer. 
     */
    public boolean readFolderFiles(String folder, boolean onlyFiles, PrintStream output) {
        boolean resultado;
        File folderFile = new File(folder);
        if ((resultado = folderFile.exists())) {
            File[] files = folderFile.listFiles();
            for (File file : files) {
                boolean isFolder = file.isDirectory();
                if ((onlyFiles && !isFolder) || (!onlyFiles)) {
                    output.println((isFolder ? "FOLDER: " : "  FILE: ") + file.getName());
                } 
            }
        }
        return resultado;
    }
    /**
     * Main method for the tests for the created method, pruebas de <strong>Java
     * read folder</strong>. Método main para las pruebas para el método creado,
     * pruebas de <strong>Java leer carpeta</strong>.
     *
     * @param args
     */
    public static void main(String args[]) {
        // Second example
        String folder = "/home/xules/codigoxules";
        PrintStream printStream = System.out;
        javaIOUtils.readFolderFiles(folder, false, printStream);
    }
}

Este el resultado de la consola para Java leer ficheros del directorio, que puedes comprobar que es igual al anterior:

run:
FOLDER: LP-5-INSERT-UPDATE-DELETE
  FILE: myfile.txt
  FILE: Mariadb-seal-shaded-browntext.png
  FILE: LPMysql-Netbeans-Conexion-al-Servidor.png
  FILE: customerdb_data_general-001.sql
  FILE: Mariadb-seal-shaded-browntext-alt.png
BUILD SUCCESSFUL (total time: 0 seconds)

 
Modifiquemos ahora el método main para exportar este resultado a un fichero utilizando el método public boolean createFile(String filePath, String fileName), este sería el ejemplo:

    /**
     * Main method for the tests for the created method, pruebas de <strong>Java
     * read folder</strong>. Método main para las pruebas para el método creado,
     * pruebas de <strong>Java leer carpeta</strong>.
     *
     * @param args
     */
    public static void main(String args[]) {
        // Third example (Tercer ejemplo)
        JavaIOUtils javaIOUtils = new JavaIOUtils();
        String folder = "/home/xules/codigoxules";
        PrintStream printStream = System.out;
        boolean result = javaIOUtils.createFile(folder, "outPut.txt");
        if (result) {
            try {
                printStream = new PrintStream(new File(folder + "/outPut.txt"));                
            } catch (FileNotFoundException ex) {
                System.out.println(ex);
            }
            javaIOUtils.readFolderFiles(folder, false, printStream);
        }
        // If all was good, we have to see in the console the new file: outPut.txt
        // Si todo fue bien en la consola tiene que aparecer el nuevo fichero: outPut.txt
        javaIOUtils.readFolderFiles(folder);
    }

 
Ahora, deberemos comprobar el resultado verificando el fichero que se ha creado nuevo, para eso añado una llamada al método de lectura para ver si ahora encuentra el nuevo fichero que hemos creado este es mi resultado:

Java leer ficheros del directorio Java I/O

Java leer ficheros del directorio Java I/O


 
Comprueba que los datos aparecen correctamente en tu fichero outPut.txt, y con esto, ya hemos aprendido algo más sobre el manejo de ficheros en Java.
 

Espero que te haya sido útil esta pequeña introducción a Java I/O. Déjanos tu opinión con un comentario.Xules

¿Qué hacemos ahora?

 
Aquí te dejo otras publicaciones sobre Java I/O:

Java copiar ficheros – Java IO

Aprendemos con ejemplos como mover y copiar ficheros desde Java

 

Java Crear archivo

Creamos un método para explicar como crear un archivo en Java

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *