简体   繁体   中英

Saving image overwrite in sdcard android

i'm using the following code for saving the image

        FrameLayout mainLayout = (FrameLayout) findViewById(R.id.frame);
            //  File root = Environment.getExternalStorageDirectory();
            //  File file = new File(root, "androidlife.jpg");
//              File file = new File(Environment.getExternalStorageDirectory()
//                        + File.separator + "/test.jpg");
                Random fCount = new Random();
                // for (int i = 0; i < 10; i++) { Comment by Lucifer
                  int roll = fCount.nextInt(600) + 1;
                  //System.out.println(roll);


                File file = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "/test" + String.valueOf(roll) +".jpg" );

                Bitmap b = Bitmap.createBitmap(mainLayout.getWidth(),
                        mainLayout.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas c = new Canvas(b);
                mainLayout.draw(c);
                FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(file);

                    if (fos != null) {
                        b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                        fos.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            //  }  Comment by Lucifer

it save the image perfectly but overwrite when i press the save button twice...What can be the issue? Any sugestion??

File file = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "/test.jpg");
if(!file.exists()){
    try {
      file.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}else{
    file.delete();
    try {
        file.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Bitmap b = Bitmap.createBitmap(mainLayout.getWidth(),
mainLayout.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
mainLayout.draw(c);
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(file);
    if (fos != null) {
        b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
        fos.close();
    }
} catch (Exception e) {
    e.printStackTrace();
}

You have given a static file name.

File file = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "/test.jpg");

So, Everytime it is going to create a image with test.jpg name and at a same location. The only logic you need to implement is to change your file name to be a dynamic file name. You can try it in this way

static int fCount = 0;

File file = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "/test" + String.valueOf(fCount++) +".jpg" );

Now above line is going to create a new file every time, starting with name test0.jpg, test1.jpg ... and so on.

But this could create a problem when you close your application and restart your application. Because it will going to start again from 0 counter.

So i suggest you to go with a random number contacatination with file name.

sticker_view.setLocked(true);

        sticker_view.setDrawingCacheEnabled(true);
        Bitmap bitmap = sticker_view.getDrawingCache();
        Log.e("BITMAP", "onOptionsItemSelected: " + bitmap);

        String root = Environment.getExternalStorageDirectory().toString();
        File newDir = new File(root + "/Edited Image");
        newDir.mkdirs();

        Random gen = new Random();
        int n = 10000;
        n = gen.nextInt(n);
        String photoName = "Image-" + n + ".jpg";
        Log.e("PHOTONAME", "onOptionsItemSelected: " + photoName);

        File file = new File(newDir, photoName);
        String filePath = file.getAbsolutePath();
        Log.e("FILEPATH", "onOptionsItemSelected: " + filePath);

        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Toast.makeText(EditActivity.this, "Image Already Exist.", Toast.LENGTH_SHORT).show();
        } else {
            file.delete();
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            FileOutputStream out = new FileOutputStream(file);
            Log.e("OUT", "onOptionsItemSelected: " + out);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
            bitmap.recycle();

            Toast.makeText(EditActivity.this, "Saved In Edited Image.", Toast.LENGTH_SHORT).show();
            item.setVisible(false);

            MediaScannerConnection.scanFile(EditActivity.this, new String[]{file.getAbsolutePath()},
                    null, new MediaScannerConnection.OnScanCompletedListener() {
                        public void onScanCompleted(String path, Uri uri) {
                            Log.i("ExternalStorage", "Scanned " + path + ":");
                            Log.i("ExternalStorage", "-> uri=" + uri);
                        }
                    });

            Intent intent = new Intent();
            intent.setAction("URI");
            intent.putExtra("uri", filePath);
            sendBroadcast(intent);
            finish();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

You can just add System.currentTimeMillis() in the name of your file name to get a complete unique file name. This will add current time in milliseconds since epoch to your file name and unless you can create more than one file in a single millisecond, no overwrite will be done.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM