2011-04-18 8 views
32

Próbowałem File.delete(), ale to nie działa. Jak usunąć katalog na karcie SD?Usunięcie folderu na karcie SD

Pracuję na systemie Android 2.1.

+0

Możliwy duplikat [? Jak usunąć całą zawartość folderu i] (https://stackoverflow.com/questions/4943629/how-to-delete -a-cały-folder-i-treść) – bummi

Odpowiedz

98

Trzeba mieć cały katalog pusty przed usunięciem directory się znaleźć here

w Android, trzeba mieć odpowiednie uprawnienia, a także - WRITE_EXTERNAL_STORAGE w manifeście.

EDIT: dla wygody skopiowane kod tutaj, ale wciąż jest z linku powyżej

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

Próbowałem usunąć pliki z folderu, ale Logcat pokazuje "nie można odłączyć" /geo1.xml ': System plików tylko do odczytu (errno = 30) '. Dodałem uprawnienie "WRITE_EXTERNAL_STORAGE" w manifeście. – Greenhorn

+0

Myślę, że '/ geo1.xml' nie znajduje się na karcie SD, ale w katalogu głównym ('/'). czy jesteś pewien, że wskazujesz właściwy plik? – MByD

+0

Nie, '/ geo.xml' znajdował się w folderze, który próbowałem usunąć, ale brakowało mi czegoś w kodzie. Teraz działa dobrze. Dzięki. :) – Greenhorn

0

katalogi muszą być puste, zanim zostaną usunięte. Trzeba rekurencyjnie pusty i usunąć wszystkie katalogi w drzewie:

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

Aktualizacja:

Wydaje się file.isDirectory() == (file.listFiles() == null), ale file.listFiles() dzienniki "fail readDirectory() errno=20" kiedy file.isDirectory() == false.

0

to działało dobrze dla mnie, mam nadzieję, że będzie działać dla Ciebie.

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 może zwrócić wartość null, dlatego wywołanie children.length w pętli bez sprawdzenia, czy dzieci mają wartość null czy nie, może wygenerować wyjątek. –

0

on pracował dla mnie:

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