Android Can';t从内部存储文件夹中删除文件

Android Can';t从内部存储文件夹中删除文件,android,android-file,Android,Android File,我想从下载文件夹中删除所有文件 我正在尝试这种方法- File mydir = new File(String.valueOf(Environment.getExternalStoragePublicDirectory("Download"))); File lister = mydir.getAbsoluteFile(); System.out.println("Total files: " + lister.list().length); for (String list : list

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

我正在尝试这种方法-

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

我已经看过很多这样的问题,其中大多数建议使用delete()或getCanonicalFile().delete()。这根本不起作用

显示-

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

尝试此操作,这将删除
文件路径
目录下的所有文件

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!");
        }
    }
}

尝试此操作,这将删除
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;
                                }

                            }

请尝试。

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

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

                            }
请尝试。

修复了它

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

删除任何文件都需要写入权限。所以我改读改写,成功了

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

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

删除任何文件都需要写入权限。所以我改读改写,成功了

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

如果您使用的是M或更高版本的Android,您是否在运行时授予了权限?是的。授予权限后,代码将被执行。
System.out.println(列表+“已删除!”)请给出一个记录内容的示例,您将看到。@blackapps f.delete()返回false。我要求您告诉我们记录的完整字符串。当然,您也可以告诉另一个。如果您使用的是M或更高版本的Android,您在运行时是否授予了权限?是的。授予权限后,代码将被执行。
System.out.println(列表+“已删除!”)请给出一个记录内容的示例,您将看到。@blackapps f.delete()返回false。我要求您告诉我们记录的完整字符串。当然,你也可以告诉另一个。isDelete是错误的。请在删除前打印日志添加此行
log.e(“TAG”,“path=“+file+”-“+aChildren”)并显示输出/TAG:path=/storage/simulated/0/Download-pg308-images.epub。。。。。。E/TAG:path=/storage/emulated/0/Download-LIBMG.pdfohk,更改此行并替换
boolean isDelete=new File(File+“/”,aChildren).delete()输出保持不变删除错误请在删除前打印日志添加此行
log.e(“TAG”,“path=“+file+”-“+aChildren”)并显示输出/TAG:path=/storage/simulated/0/Download-pg308-images.epub。。。。。。E/TAG:path=/storage/emulated/0/Download-LIBMG.pdfohk,更改此行并替换
boolean isDelete=new File(File+“/”,aChildren).delete()输出保持不变