web-dev-qa-db-fra.com

Supprimer un dossier sur la carte SD

J'ai essayé File.delete() mais ça ne marche pas. Comment supprimer un répertoire sur la carte SD?

Je travaille sur Android 2.1.

32
Greenhorn

Vous devez avoir tout le répertoire vide avant de supprimer le répertoire lui-même, voir ici

Sous Android, vous devez également disposer des autorisations appropriées - WRITE_EXTERNAL_STORAGE dans votre manifeste.

EDIT: pour plus de commodité, j'ai copié le code ici, mais c'est toujours à partir du lien ci-dessus

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() );
  }
100
MByD

Les répertoires doivent être vides avant d'être supprimés. Vous devez vider récursivement et supprimer tous les répertoires de l'arborescence:

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

Mettre à jour:

Cela ressemble à file.isDirectory() == (file.listFiles() == null), mais file.listFiles() enregistre "fail readDirectory() errno=20" lorsque file.isDirectory() == false.

https://stackoverflow.com/a/16411911/2397275

uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"

dans le fichier AndroidManifest.xml

1
Codeerror

Cela a fonctionné pour moi:

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;
    }
0
Deven

cela a bien fonctionné pour moi, j'espère que cela fonctionnera pour vous.

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();
        }
    }
0
Murali Mohan