En el articulo anterior (
http://foro.cibernodo.net/tema-borrar-un...lase-file) veíamos como borrar un archivo único usando la clase File de java (por supuesto), esta vez veremos como se borra un directorio (carpeta) del sistema, el tratamiento obviamente es algo distinto puesto que debemos averiguar si esta carpeta tiene otras carpetas y archivos dentro y a su vez las demás carpetas tienen otras cosas y así sucesivamente.
No les suena esto a Recursividad? Pues si, se debe hacer recursividad para ir revisando cada carpeta que nos consigamos, recuerden también que debemos borrar en orden jerárquico, es decir, desde la ultima hoja del árbol hasta la raíz y no viceversa.
Bien pondré un método para hacer lo que necesitamos y luego se los explico:
Lenguaje JAVA
public void BorrarDirLocal(File dir) {
File[] f = dir.listFiles();
for(int i = 0; i < f.length; i++) {
if(f[i].isDirectory()) {
BorrarDirLocal(f[i]);
}
if(!f[i].delete()) {
System.out.println("Error al borrar " + f[i].getName());
}
}
}
Fíjense que es sencillo, el método recibirá una variable del tipo File (ya mencionamos en el articulo anterior que la variable debe contener la ruta de la carpeta a borrar), luego se crea dentro del método un arreglo del tipo File también, que recibirá el listado de carpetas y archivos que se encuentren dentro de la variable que recibió el método, en este caso dir.
Luego con su respectivo ciclo for (que cuenta hasta la cantidad de archivos existentes dentro de la carpeta evaluada) se procesa cada archivo y/o carpeta, por eso con un if se si f[i] es una carpeta, de serlo se llama al mismo método que estamos construyendo, cuyo parámetro sera la nueva carpeta (f[i] en este caso), si no es una carpeta, pues se procede a borrar (recuerden que delete() devuelve un valor booleano que debemos capturar y ademas procesar.
De esta manera podremos borrar cualquier carpeta siempre que sea posible claro esta, recuerden ademas agregar las condiciones necesarias para evaluar si la carpeta se puede escribir (necesario para poder borrar, porque si no tenemos permiso sera erróneo, canWrite() es el método para ello).
Hasta una nueva entrega.
HTC Desire SLCD: S-OFF, cm7/r2 hboot, CyanogenMod Kernel, CyanogenMod NB 262
Samsung Galaxy S i9000: Chainfire Kernel (CF-ROOT), Value Pack ROM 2.3.6 JVU
SE Xperia x10i: Unlocked Bootloader, FXP052 Kernel, CyanogenMod 7.2.0 FXP052
Motorola Dext MB200: CyanogenMod 7.1 RC1
LG Optimus One P500: Stock ROM 2.3.3
ZTE Racer: Stock