图像保存到SD卡覆盖现有文件

时间:2013-10-16 17:40:40

标签: android bitmap save

我在按钮上成功保存图像,然后单击一个文件夹中的SD卡。

我遇到的问题是,如果我保存的文件超过1个,图像会覆盖以前保存的现有图像,因为文件名相同,所以它会覆盖退出的图像。

当图像保存时,是否有任何方法可以实现它,每次都会以不同的名称保存,因此不会覆盖?

提前致谢!

这是我到目前为止所拥有的:

OutputStream output;

        Time now = new Time();
        now.setToNow();
        String time = now.toString();

        // Retrieve the image from the res folder
        BitmapDrawable drawable = (BitmapDrawable) mImageView.getDrawable();
        Bitmap bitmap1 = drawable.getBitmap();

        // Find the SD Card path
        File filepath = Environment.getExternalStorageDirectory();

        // Create a new folder in SD Card
        File dir = new File(filepath.getAbsolutePath()
                + "/Wallpapers/");
        dir.mkdirs();

        // Create a name for the saved image
        File file = new File(dir, "Wallpaper"+ time );

        // Show a toast message on successful save
        Toast.makeText(getActivity(), "Wallpaper saved with success!",
                Toast.LENGTH_LONG).show();
        try {

            output = new FileOutputStream(file);

            // Compress into png format image from 0% - 100%
            bitmap1.compress(Bitmap.CompressFormat.PNG, 100, output);
            output.flush();
            output.close();
        }

        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;

2 个答案:

答案 0 :(得分:1)

使用:

Time now = new Time();
now.setToNow();
String time = now.toString();

并获取您尝试保存文件的时间。

然后,将其附加到文件名的末尾。 这样,您的文件将永远不会具有相同的名称,但始终具有相同的前缀。

检查目录是否存在,

File dir = new File(Environment.getExternalStorageDirectory() + "/mydirectory");
if(dir.exists() && dir.isDirectory()) {
    // do something here
}

但是,没有SD卡的设备将无法正常工作。

答案 1 :(得分:1)

Would there be any way I would be able to make it so when the image saves, 
it saves with a different name each time so it doesn't overwrite?

是的,您需要在使用File.exists()保存之前检查目录中是否已提供相同名称的文件。这样做:

   File file = new File(dir, "Wallpaper.jpg");
   if(file.exists()){
        // assign different name to file
    }
   else{
         // file not present with same name
    }