android - 无法从外部存储中删除位图
问题描述
我似乎无法从本地存储中删除图片。我想要发生的是:删除旧图片,添加同名的新图片。当我更改图片名称时,将其作为新图片加载没有问题。但是,当我不更改其名称时,它会显示旧图片。我尝试了 context.deleteFile(filename)。file.exists 删除后返回 false,但图片仍然存在。覆盖的解决方案可能会有所帮助。我在清单中也有外部存储权限。谢谢!
删除:
void deleteOldPicture(String filename, Context context){
File file = new ImageSaver(context).setFileName(filename).setDirectoryName("images").createFile();
file.delete();
}
创建文件
File createFile() {
File directory;
if(external){
directory = getAlbumStorageDir(directoryName);
}
else {
directory = context.getDir(directoryName, Context.MODE_PRIVATE);
}
return new File(directory, fileName);
}
private File getAlbumStorageDir(String albumName) {
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e("ImageSaver", "Directory not created");
}
return file;
}
保存文件:
private String saveFileInSD(String name, ImageView image){
String filename = name+parentId+".png";
Log.e("Filename is", filename);
new ImageSaver(getApplicationContext()).setFileName(filename).setDirectoryName("images").save(((BitmapDrawable) image.getDrawable()).getBitmap());
return filename;
}
解决方案
将此库添加到您的 Gradle 中,它将有助于清理您的代码:
implementation 'org.apache.commons:commons-io:1.3.2'
执行以下操作以保存图片:
//Compress the Bitmap
ByteArrayOutputStream stream = new ByteArrayOutputStream();
yourBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
//save Bitmap to file and get it form preview activity and especially to avoid TransactionTooLargeException
File imageFile = new File(getExternalCacheDir(), "image.png");
try {
FileOutputStream imageFileStream = new FileOutputStream(imageFile);
IOUtils.copyLarge(new ByteArrayInputStream(stream.toByteArray()), imageFileStream);
IOUtils.closeQuietly(imageFileStream);
} catch (Exception e) {
e.printStackTrace();
}
要获取保存的位图的路径,只需使用以下方法:
imageFile.getAbsolutePath()
推荐阅读
- php - 从下拉菜单中获取所选项目
- string - 将一个字符移除到一个字符串中
- java - java - 如何在使用带有chromedriver的java selenium时拒绝或阻止chrome弹出?
- node.js - 如何减少对 PubMed API 的查询次数以检索文章标题和摘要?
- android - net::ERR_CLEARTEXT_NOT_PERMITTED 在 React Ionic(电容器)中给出错误
- ios - iOS InApp 购买在生产中不起作用(在 testflight 中可以)
- java - 使用 Android-x86 模拟器“Flutter Run”时构建错误
- scala - 使用 Scala 3 播放框架
- gcc - 如何使用 gcc 检测 AVX2 支持
- hibernate - Hazelcast EventQueue 重载更新缓存区域 default-update-timestamps-region