无法从外部存储删除位图

时间:2018-06-25 13:09:53

标签: android file bitmap storage overwrite

我似乎无法从本地存储中删除图片。我要发生的是:删除旧图片,添加具有相同名称的新图片。 当我更改图片名称时,将其加载为新图片毫无问题。但是,当我不更改其名称时,它将显示旧图片。 我尝试了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;
}

1 个答案:

答案 0 :(得分:0)

将此库添加到您的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()