如何删除使用Uri创建的文件?

时间:2017-03-18 17:59:14

标签: android

我的应用程序从相机拍摄照片并将其保存在Uri存储在SQL数据库中的文件中。使用数据库中的Uri初始化位图可以完美地工作。但是,当我尝试使用数据库中的Uri初始化文件,然后使用imagefile.delete()进行删除时,它不起作用。我尝试了其他帖子中提供的几种方法,但都没有效果。

这是我如何保存文件。

相机意图:

Intent startCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (startCamera.resolveActivity(getPackageManager())!=null)
                    {
                        photoFile= null;
                        try{
                            photoFile = createImageFile();
                        }
                        catch (IOException ex)
                        {
                            Log.e("File Creation","error");
                        }
                        if (photoFile!=null)
                        {
                            photoURI = FileProvider.getUriForFile(context,"lcukerd.com.android.fileprovider",photoFile);
                            startCamera.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
                            camerastarted=true;
                            startActivityForResult(startCamera,CAMERA_REQUEST);
                        }
                    }

声明的方法:

private File createImageFile() throws IOException
{
    String EName = "Stuff";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(EName,".jpg",storageDir);
    return image;
}

压缩图片:

photoFile.delete();
FileOutputStream out = null;
                    try {
                        File image = createImageFile();
                        photoURI = FileProvider.getUriForFile(context, "lcukerd.com.android.fileprovider", image);
                        out = new FileOutputStream(image);
                        photo.compress(Bitmap.CompressFormat.PNG, 100, out);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            if (out != null) {
                                out.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

将Uri保存到数据库是将Uri简单转换为字符串,然后保存在表的TEXT列中。

帮我删除图片文件。

编辑:

我试过了。

private void deleteimage(String imageloc)
    {
        File imagefile = new File(getRealPathFromURI(Uri.parse(imageloc)));
        Log.d("file deletion",String.valueOf(imagefile.delete())+" "+imageloc);
    }
    public String getRealPathFromURI( Uri contentUri) {
        String result;
        Cursor cursor = getContentResolver().query(contentUri, null, null, null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            result = contentUri.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }

和..

private void deleteimage(String imageloc)
    {
        File imagefile = new File(Uri.parse(imageloc).getpath());
        Log.d("file deletion",String.valueOf(imagefile.delete())+" "+imageloc);
    }

没有工作。

1 个答案:

答案 0 :(得分:7)

由于这是您从Uri获得的FileProvider,请在delete()上致电ContentResolver,传递Uri(加{{1}其余参数)。这将删除基础文件,至少根据the FileProvider documentation

或者,在数据库中存储文件路径而不是null,因为这是您的文件。您可以根据需要使用Uri重新创建Uri,并且可以使用FileProvider.getUriForFile()上的delete()删除文件,并指定其路径。