从可移动SD卡(第二外部存储)删除Android文件

时间:2018-05-03 09:56:33

标签: android file delete-file

我已经阅读了本论坛的所有主题,但没有任何内容适合我。我有文件路径的arraylist,我需要删除其中的一些。在我的代码中,我尝试使用:

    File file = new File(filesPath.get(0));
    file.delete();
    if (file.exists()) {
        try {
            file.getCanonicalFile().delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (file.exists()) {
            file.getAbsoluteFile().delete();
        }
    }

    Log.e("MyLogs", file.exists() ? "true" : "false");

filesPath我从MediaStore获得它看起来像" /storage/extSdCard/mmm/bensound-summer.mp3"。我可以毫无问题地阅读这条路径,但我无法删除它。这是获取字符串数组的代码:

    ArrayList<String> filesPath = new ArrayList<>();

    Uri contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String[] projection = {MediaStore.Images.Media.DATA};

    try {
        Cursor cursor = context.getContentResolver().query(
                contentUri,
                projection,
                MediaStore.Audio.Media.IS_MUSIC + " != 0",
                null,
                null);

        if (cursor != null && cursor.moveToFirst() && cursor.getCount() > 0) {

            do {

                String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                File file = new File(path);
                if (file.exists())
                    filesPath.add(path);

            } while (cursor.moveToNext());

            return filesPath;

        } else {
            return null;
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }

当然我添加了对manifest的权限:

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

来自this link我为我的代码提供了一些代码,但它并没有帮助我解决我的问题,这就是为什么我在这里写了我的问题。

修改

刚发现重点:我无法从SD卡中删除文件(可移动)!从存储的decive一切都删除没有任何问题。

编辑2:

try {
    long id = -1;
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Audio.Media._ID },
            MediaStore.Audio.Media.DATA + "=?",
            new String[] { file.getAbsolutePath() },
            null);

    if (cursor != null && cursor.moveToFirst() && cursor.getCount() > 0) {
        id = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
        cursor.close();
        Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
        DocumentFile documentFile = DocumentFile.fromSingleUri(context, uri);
        if (documentFile.delete()) {
            Uri mediaContentUri = ContentUris.withAppendedId(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    id
            );
            context.getContentResolver().delete(mediaContentUri, null, null);
        }
    }
} catch (Exception ex) {
    ex.printStackTrace();
}

我收到了一个异常错误:

Failed to delete document
         java.lang.UnsupportedOperationException: Unsupported call: android:deleteDocument

错误指向 documentFile.delete()

4 个答案:

答案 0 :(得分:1)

首先检查您是否有权读取外部存储和写入外部存储然后

您可以通过此代码删除..

您可以使用File.delete()

File dir2 = new File(Environment.getExternalStorageDirectory() + "/Eraser/temp");

    File dir = new File(Environment.getExternalStorageDirectory() + "/Eraser/Capture");

    if (dir.isDirectory())
    {

        String[] children = dir.list();
        for (int i = 0; i < children.length; i++)
        {
            new File(dir, children[i]).delete();
        }
    }
    dir.delete();
    if (dir2.isDirectory())
    {

        String[] children = dir2.list();
        for (int i = 0; i < children.length; i++)
        {
            new File(dir2, children[i]).delete();
        }
    }

    dir2.delete();

答案 1 :(得分:1)

  

它看起来像“/storage/extSdCard/mmm/bensound-summer.mp3”。

然后该文件位于可移动的micro SD卡上。

Micro SD卡只适用于现代Android系统上的应用。

这就是你无法从中删除该文件的原因。

好吧,不是你现在尝试做的方式。

答案 2 :(得分:0)

在删除文件之前,您确定在应用程序中获得了WRITE_EXTERNAL_STORAGE权限吗?

由于您已经可以访问该文件,因此调用delete方法时不应存在任何其他问题。此外,如果捕获任何异常,您还可以检查log cat

答案 3 :(得分:0)

我希望你在android清单文件中添加以下权限..

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

用于代码下面使用的删除文件..

File file = new File(selectedFilePath);
boolean deleted = file.delete();