2011-04-18 40 views
32

Intenté File.delete() pero no funciona. ¿Cómo eliminar un directorio en la tarjeta SD?Eliminar una carpeta en la tarjeta SD

Estoy trabajando en Android 2.1.

+0

duplicado posible de [? ¿Cómo suprimir toda una carpeta y contenido] (https://stackoverflow.com/questions/4943629/how-to-delete -a-whole-folder-and-content) – bummi

Respuesta

98

usted tiene que tener todo el directorio vacío antes de eliminar el directorio en sí, ver here

En Android, usted debe tener los permisos adecuados, así - WRITE_EXTERNAL_STORAGE en su manifiesto.

EDIT: por conveniencia He copiado el código aquí, pero todavía es desde el enlace anterior

public static boolean deleteDirectory(File path) { 
    if(path.exists()) { 
     File[] files = path.listFiles(); 
     if (files == null) { 
      return true; 
     } 
     for(int i=0; i<files.length; i++) { 
     if(files[i].isDirectory()) { 
      deleteDirectory(files[i]); 
     } 
     else { 
      files[i].delete(); 
     } 
     } 
    } 
    return(path.delete()); 
    } 
+0

Intenté eliminar archivos en la carpeta, pero Logcat muestra 'no se puede desvincular '/geo1.xml': sistema de archivos de solo lectura (errno = 30)'. Agregué el permiso 'WRITE_EXTERNAL_STORAGE' en manifiesto. – Greenhorn

+0

Creo que '/ geo1.xml' no está en la tarjeta SD, sino en la raíz ('/'). ¿Estás seguro de que estás apuntando al archivo correcto? – MByD

+0

No, '/ geo.xml' estaba en la carpeta que estaba intentando eliminar, pero me faltaba algo en el código. Está funcionando bien ahora. Gracias. :) – Greenhorn

0

directorios deben estar vacíos antes de que sean eliminados. Tienes que recurrentemente vacío y eliminar todos los directorios en el árbol:

boolean delete(File file) { 
    if (file.isDirectory()) { 
     File[] files = file.listFiles(); 
     if (files != null) 
      for (File f : files) delete(f); 
    } 
    return file.delete(); 
} 

Actualización:

Parece que file.isDirectory() == (file.listFiles() == null), pero file.listFiles() logs "fail readDirectory() errno=20" cuando file.isDirectory() == false.

0

funcionó bien para mí, espero que funcione para usted.

File dir = new File(Environment.getExternalStorageDirectory()+"DirName"); 
if (dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      new File(dir, children[i]).delete(); 
     } 
    } 
+1

dir.list puede devolver nulo, por lo tanto, invocando children.length en su ciclo sin verificar si children es nulo o no puede lanzar una excepción. –

0

que trabajó para mí:

Add in manifest- 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

private boolean deleteDirectory(File path) { 
     if(path.exists()) { 
      File[] files = path.listFiles(); 
      if (files == null) { 
       return false; 
      } 
      for(File file : files) { 
       if(file.isDirectory()) { 
        deleteDirectory(file); 
       } 
       else { 
       file.delete(); 
       } 
      } 
     } 
     return path.exists()?path.delete():false; 
    } 
Cuestiones relacionadas