14.1 CLASE FILE I

 

Bienvenidos a todos a un nuevo bloque, vamos a ver en como manipular archivos y directorios.

En este post vamos a comenzar a ver como manipular los ficheros y directorios de la máquina huésped donde se esté ejecutando el programa Java, cuando nos referimos a manipular nos estamos refiriendo a ver qué archivos puede haber en una ruta en concreto, hacer un listado de los archivos que hay, ver las propiedades esos archivos y directorios, etc. Para hacer todo esto vamos a utilizar una clase de la API de Java: File que tiene una serie de métodos:

·         getAbsolutePath()

·         getPath()

·         getCanonicalPath()

·         exists()

·         list()

·         isDirectory()

Para empezar vamos a ver el uso de los métodos: getAbsolutePath() y exists(). El método getAbsolutePath() devuelve un dato de tipo String o texto, este texto representa la ruta absoluta de un archivo o directorio. Y el método exists() nos devuelve un dato de tipo boolean false o true y nos indica si un archivo o directorio existe en la ruta especificada.

Vamos a verlo mediante la práctica nos creamos un nuevo proyecto al que llamamos Manipulación dentro de este proyecto nos creamos un paquete al que llamamos ficheros_directorios dentro de este paquete creamos una clase a la que llamamos PruebaRutas cuyo código es el siguiente:

package ficheros_directorios;

 

public class PruebasRutas {

 

      public static void main(String[] args) {

            // TODO Auto-generated method stub

 

      }

 

}

Antes de continuar con la práctica sería recomendable ir a la API de Java y conocer un poco más el uso de la clase File así como sus métodos y constructores.

Lo que vamos a hacer en la práctica es un ejemplo que apunte a un archivo que en principio no existe.

Empezamos creando una instancia de la clase File dentro del método principal main y como parámetro le vamos a pasar un nombre de un archivo que no existe también hay que importar el paquete java.io:

package ficheros_directorios;

 

import java.io.*;

 

public class PruebasRutas {

 

      public static void main(String[] args) {

           

            File archivo = new File("archivo_ejemplo");

 

      }

 

}

Alguno de vosotros os preguntareis porque en lugar de pasar como parámetro una ruta le he pasado el nombre de un archivo, cuando no se especifica ruta ninguna lo que hace el programa de Java tomar como ruta por defecto la carpeta o directorio donde estamos almacenando todo nuestro proyecto por lo que la ruta por defecto es el proyecto en sí que es Manipulación tal y como le hemos llamado o como le habéis llamado vosotros por si tiene un nombre de proyecto diferente..

¿Cómo podemos ver esto? Utilizando el método getAbsolutePath() creamos un System.out para que nos imprima la ruta absoluta del archivo especificado en la instancia de File.

package ficheros_directorios;

 

import java.io.*;

 

public class PruebasRutas {

 

      public static void main(String[] args) {

           

            File archivo = new File("archivo_ejemplo");

           

            System.out.println(archivo.getAbsolutePath());

 

      }

 

}

Si ejecutamos la aplicación vemos en consola que nos muestra la ruta absoluta del archivo:



Para comprobar si este archivo existe o no utilizamos el método exists() que devuelve un valor booleano:

package ficheros_directorios;

 

import java.io.*;

 

public class PruebasRutas {

 

      public static void main(String[] args) {

           

            File archivo = new File("archivo_ejemplo");

           

            System.out.println(archivo.getAbsolutePath());

           

            System.out.println(archivo.exists());

 

      }

 

}

Y vemos que en consola nos devuelve el valor false porque el archivo no existe:



Si nos vamos a la carpeta del proyecto vemos que efectivamente el archivo no existe pero sí que hay otros archivos y carpetas:



Si le indicamos como parámetro la carpeta src nos imprimirá primero la ruta absoluta donde se encuentra este directorio y luego un valor booleano true porque la carpeta sí que existe:

package ficheros_directorios;

 

import java.io.*;

 

public class PruebasRutas {

 

      public static void main(String[] args) {

           

            File archivo = new File("src");

           

            System.out.println(archivo.getAbsolutePath());

           

            System.out.println(archivo.exists());

 

      }

 

}



Llegados a este punto como podemos crear nosotros un programa que imprima un listado de todos los archivos y directorios que se encuentre en una carpeta. Tengo una carpeta en el escritorio llamada Interfaces es un proyecto de Java que contiene lo siguiente:



En las carpetas a su vez hay  otros archivos y carpetas:



Nos creamos una nueva clase a la que llamamos AccesoFicheros e importamos el paquete java.io:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

 

      }

 

}

Tenemos que apuntar a la carpeta Interfaces por lo que instanciamos la clase File:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

 

      }

 

}

Imprimimos la ruta absoluta de este directorio:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

           

            System.out.println(ruta.getAbsolutePath());

 

      }

 

}

Probamos:



A continuación tenemos utilizar el método list() que nos devuelve un array de tipo String que devuelve el nombre de los archivos y carpetas de la ruta especificada, lo haríamos de la siguiente forma:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

           

            System.out.println(ruta.getAbsolutePath());

           

            String[] nombres = ruta.list();

 

      }

 

}

Para recorrer este array utilizamos un bucle for y a la vez que se imprima por consola todo el contenido:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

           

            System.out.println(ruta.getAbsolutePath());

           

            String[] nombres = ruta.list();

           

            for(int i=0; i<nombres.length; i++) {

                 

                  System.out.println(nombres[i]);

            }

 

      }

 

}

Probamos:



Para ver el contenido de las carpetas utilizamos el método isDirectory() que devuelve un valor de tipo boolean que nos indica si es un directorio o no, en el caso de que sea una carpeta entrar en ella y listar todo el contenido. Para ello necesitamos almacenar la ruta de cada archivo o carpeta que estemos examinando en cada momento tenemos la ruta de la carpeta Interfaces pero necesitamos la ruta de los otros archivos o carpetas que queramos examinar, para hacer esto vamos a utilizar otro constructor de la clase File que por una parte nos pide como parámetro la ruta absoluta y como segundo argumento el archivo o carpeta que queremos examinar, dentro del bucle for creamos una nueva instancia de la clase File:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

           

            System.out.println(ruta.getAbsolutePath());

           

            String[] nombres = ruta.list();

           

            for(int i=0; i<nombres.length; i++) {

                 

                  System.out.println(nombres[i]);

                 

                  File f = new File(ruta.getAbsoluteFile(), nombres[i]);

            }

 

      }

 

}

Lo que hemos hecho ha sido que a cada vuelta del bucle for se examine la ruta y además cada archivo o carpeta que contenga la carpeta principal.

Ahora tenemos que preguntarle que donde apunta la f si es un archivo o un directorio esto lo hacemos mediante un condicional if y un bucle for de la siguiente forma:

package ficheros_directorios;

 

import java.io.*;

 

public class AccesoFicheros {

 

      public static void main(String[] args) {

           

            File ruta = new File("C:/Users/usuario/Desktop/Interfaces");

           

            System.out.println(ruta.getAbsolutePath());

           

            String[] nombres = ruta.list();

           

            for(int i=0; i<nombres.length; i++) {

                 

                  System.out.println(nombres[i]);

                 

                  File f = new File(ruta.getAbsoluteFile(), nombres[i]);

                 

                  if(f.isDirectory()) {

                       

                        String[] subcarpetas = f.list();

                       

                        for(int j=0; j<subcarpetas.length; j++) {

                            

                             System.out.println(subcarpetas[j]);

                        }

                  }

            }

 

      }

 

}

Dentro del if le pasamos como condición que si es una carpeta creamos un array de tipo String con un bucle for recorremos este array si es una carpeta veremos el interior de esta carpeta si contiene otras carpetas y ficheros:



Con cualquier duda podéis hacérmelo llegar a través de los comentarios del blog. Os espero en el próximo, hasta pronto!

13.2 CAMBIO DE VERSIONES << >> 14.2 CLASE FILE II




No hay comentarios:

Publicar un comentario