首页 > 解决方案 > 从存储中删除图像

问题描述

我想从存储中删除一个图像文件,但它返回 false。

我在我的应用程序中创建,我可以删除它但是当我重新安装我的应用程序时我可以显示它但我不能删除它

这是我的代码:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    File file = new File(cartPostalDbs.get(position).getFilePath());
    boolean deleted = file.delete();
    if (deleted) {
        cartPostalDbs.remove(mPos);
        notifyDataSetChanged();
    } else {
        Toast.makeText(context, "Can Not Delete File", Toast.LENGTH_SHORT).show();
    }
}

这是我的文件路径

/storage/emulated/0/Pictures/yadim/1/1558.jpg

我检查了 PERMISSION 并使用了这个权限:

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

标签: javaandroidfile

解决方案


这就是您所需要的,它适用于多种情况:

•如果要删除目录(文件夹) •如果要删除的文件/目录不存在

这是代码:

public void deleteFile(String path) {
    File file = new File(path);

    if (!file.exists()) return;

    if (file.isFile()) {
        file.delete();
        return;
    }

    File[] fileArr = file.listFiles();

    if (fileArr != null) {
        for (File subFile : fileArr) {
            if (subFile.isDirectory()) {
                deleteFile(subFile.getAbsolutePath());
            }

            if (subFile.isFile()) {
                subFile.delete();
            }
        }
    }

    file.delete();
}

用法:

deleteFile(cartPostalDbs.get(position).getFilePath());

您的最终代码应如下所示:

if (ContextCompat.checkSelfPermission(context, 
Manifest.permission.WRITE_EXTERNAL_STORAGE) == 
PackageManager.PERMISSION_GRANTED) {
try {
deleteFile(cartPostalDbs.get(position).getFilePath());
boolean deleted = true;
} catch ( Exception e ) { boolean deleted = false; }
if (deleted) {
    cartPostalDbs.remove(mPos);
    notifyDataSetChanged();
} else {
    Toast.makeText(context, "Can Not Delete File", 
Toast.LENGTH_SHORT).show();
}
}

编辑 1: 如果未授予权限,我尝试编辑代码以请求权限:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
try {
    deleteFile(cartPostalDbs.get(position).getFilePath());
    boolean deleted = true;
} catch ( Exception e ) { boolean deleted = false; }
if (deleted) {
        cartPostalDbs.remove(mPos);
        notifyDataSetChanged();
} else {

    requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000);

}
}

添加 onActivityResult void 以在授予权限时删除文件:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
    super.onActivityResult(requestCode, resultCode, data);
    
    switch (requestCode) {
            case 1000:
            if (resultCode == Activity.RESULT_OK) {
        if (ContextCompat.checkSelfPermission(context, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE) == 
        PackageManager.PERMISSION_GRANTED) {
                try {
                        deleteFile(cartPostalDbs.get(position).getFilePath());
                        boolean deleted = true;
                } catch ( Exception e ) { boolean deleted = false; }
                if (deleted) {
                            cartPostalDbs.remove(mPos);
                            notifyDataSetChanged();
                } else {
                        Toast.makeText(context, "Can Not Delete File", Toast.LENGTH_SHORT).show();
                }
        }
    } else {
        Toast.makeText(context, "Can Not Delete File", Toast.LENGTH_SHORT).show();
    }
            break;
            default:
            break;
    }
}

也不要忘记将权限添加到 AndroidManifest.xml 文件


推荐阅读