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