web-dev-qa-db-ja.com

SDカードのフォルダーを削除する

File.delete()を試しましたが、うまくいきません。 SDカードのディレクトリを削除する方法

私はAndroid 2.1。

32
Greenhorn

ディレクトリ自体を削除する前に、すべてのディレクトリを空にする必要があります。 here を参照してください

Androidでは、適切な権限も必要です-WRITE_EXTERNAL_STORAGEマニフェスト内。

編集:便宜上、ここにコードをコピーしましたが、まだ上記のリンクからです

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

ディレクトリは、削除する前に空にする必要があります。ツリー内のすべてのディレクトリを再帰的に空にして削除する必要があります。

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

更新:

file.isDirectory() == (file.listFiles() == null)のように見えますが、file.listFiles()fail readDirectory() errno=20のときに "file.isDirectory() == false"を記録します。

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

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

androidManifest.xmlファイル内

1
Codeerror

それは私のために働いた:

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

それは私のためにうまく働いた、私はそれがあなたのために働くことを願っています。

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