无法从内部存储文件夹中删除文件

Can't delete files from internal storage folder

我想删除下载文件夹中的所有文件

我正在尝试这种方法 -

File mydir = new File(String.valueOf(Environment.getExternalStoragePublicDirectory("Download")));
File lister = mydir.getAbsoluteFile();

System.out.println("Total files: " + lister.list().length);

for (String list : lister.list()) {
    File f = new File(lister, list);
    if (f.delete())
        System.out.println(list + " is Deleted!");
    else
        System.out.println(list + " not deleted!");
}

它不起作用,f.delete 返回 false。

我已经在SO上看了很多这样的问题,大多数建议使用delete()或getCanonicalFile().delete()。这是行不通的。

清单-

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

试试这个,这将删除 filePath 目录下的所有文件

File file = new File(filePath);

if (file.isDirectory()) {
    String[] children = file.list();
    if (children != null) {
        for (String aChildren : children) {
            boolean isDelete = new File(file, aChildren).delete();
            if (isDelete)
                  System.out.println(aChildren + " is Deleted!");
            else
                  System.out.println(aChildren + " not deleted!");
        }
    }
}

不是答案而是更健壮的代码:

                            File dir = Environment.getExternalStoragePublicDirectory("Download");

                            if ( !dir.canWrite() )
                            {
                                Toast.makeText(context, "Can not write in directory\n\n"  + dir.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                return;
                            }

                            File files [] = dir.listFiles();

                            if ( files==null )
                            {
                                Toast.makeText(context, "Could not listFiles() for\n\n"  + dir.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                return;
                            }

                            for ( File file : files)
                            {
                                if ( file.isDirectory())
                                    continue;

                                if ( ! file.delete())
                                {
                                Toast.makeText(context, "Could not delete\n\n" + file.getAbsolutePath(), Toast.LENGTH_LONG).show();

                                break;
                                }

                            }

请尝试。

已修复。

我的应用只请求用户读取权限,而不是写入权限。

删除任何文件都需要 WRITE 权限。所以我将 READ 更改为 WRITE,它成功了!

 if (ContextCompat.checkSelfPermission(MainActivity.this
            , Manifest.permission.**WRITE**_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
     {   
       // ...
     }