如何在安卓5中从外部存储中删除文件

5

我使用了

File f=new File(MyPath);
f.delete();

我使用了权限WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE,但在Android 5上无法正常工作。

Logcat消息:

java.io.FileNotFoundException: storage/external_SD/mm.txt: open failed: EACCES (Permission denied)  

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mahestan_programming.myapplication">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

自Android 4.4版本以后,我们无法在Micro SD卡中删除和写入文件,因为它现在是只读的。


你能发布你的Logcat日志吗? - Artem Mostyaev
@ArtemMostyaev logcat 对我没有发送任何日志。 - M. Rostami
仔细查看您应用程序的所有logcat消息。可能会有带有附加错误信息的橙色警告。 - Artem Mostyaev
@ArtemMostyaev 的帖子已编辑。 - M. Rostami
4个回答

2
请仔细检查您的文件路径,路径应该类似于以下内容:
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Audio/audio_20160622_081844.3gp";
File file = new File(filePath);
if (file.exists()) {
   file.delete();
}

Android 5可能会更改卡片命名规则,因此路径可能会不同。 - Artem Mostyaev

1
storage/external_SD/mm.txt

那不是一个有效的路径。您应该使用

/storage/external_SD/mm.txt

这实际上不是外部存储,而是可移动存储。

从Android 4.4开始,应用程序无法再写入micro SD卡。

Google做出了这样的决定。

我们必须接受它。但这很困难。


你是什么意思?我告诉过你,自4.4版本以来,你不能从micro SD卡中删除文件。那么问题还没有解决吗? - greenapps
我的意思是/storage/...那个问题还没有解决。如果应用程序中的文件处于“私密模式”,是否无法删除它们?要删除文件,该怎么做? - M. Rostami
你不能再从微型SD卡中删除文件了。 - greenapps
没问题!但是我无法将文件写入SD卡,这是我的问题。 - M. Rostami
不行。您也不能再向SD卡中写入文件了。您无法更换该卡。它现在是只读的。 - greenapps
糟糕,谢谢。这是什么原因?安全性吗? - M. Rostami

0
您收到了 java.io.FileNotFoundException 的错误,这意味着文件路径 storage/external_SD/mm.txt 是错误的。
在我的设备上,我有不同的位置,其中一个可能是您想要的。
  1. /external_sd/ - 没有前缀 storage
  2. /storage/sdcard0 - 索尼提供的虚拟SD卡
  3. /storage/sdcard1 - 插入到设备中的实际物理SD卡
此外,您也可以在Android Studio中手动查看文件系统。请点击“工具” -> “Android” -> “Android设备监视器”。在左侧选择您的设备,并在右侧选项卡中选择“文件资源管理器”,您将能够查看设备上的所有文件。

我的路径没问题。在安卓5中,logcat发送“权限被拒绝”的消息。 - M. Rostami

0

试试这个:

  private ArrayList<String> _filePaths = new ArrayList<String>();
  final String imgPath=_filePaths.get(_postion);
        final Snackbar snackbar = Snackbar
                .make(view, "Delete Image?", Snackbar.LENGTH_LONG)
                .setAction("DELETE", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        File file = new File(imgPath);
                        file.delete();

                        Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!", Snackbar.LENGTH_SHORT);
                        notifyDataSetChanged();
                        View sbView = snackbar1.getView();
                        TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
                        textView.setTextColor(Color.YELLOW);
                        snackbar1.show();

                    }
                });
        snackbar.setActionTextColor(Color.RED);
        View sbView = snackbar.getView();
        TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
        textView.setTextColor(Color.YELLOW);
        snackbar.show();

如果它不起作用,那就发布logcat和你正在使用的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接