java - 从存储中删除图像
问题描述
我想从存储中删除一个图像文件,但它返回 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" />
解决方案
这就是您所需要的,它适用于多种情况:
•如果要删除目录(文件夹) •如果要删除的文件/目录不存在
这是代码:
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 文件
推荐阅读
- yaml - Swagger YML:无法执行文件上传 api。框变灰,不允许我继续查看任何类型的响应
- html - 如何使表格边框适用于所有浏览器?
- javascript - JavaScript:在调用该 EventListener 的函数中删除 EventListener
- c# - 编写测试用例时,有没有办法从 ini 文件加载数据?
- android - 需要帮助在 Kotlin 的 Firebase QR 码扫描仪中完成活动
- vb.net - 您如何区分运算符与知道它不是运算符但属于字符串?
- ios - 如何在所有视图控制器的导航栏中添加一个通用按钮?
- laravel - Laravel - 如何解决错误 404 路由问题
- mysql - 在 MySQL 5.7 中混合事务和表锁是不现实的吗?
- css - 保持光标在列表之间抓取。@angluar/cdk/拖放