Изображение не перезаписывается с тем же именем

Я разрабатываю приложение для редактирования изображений ... поэтому каждый раз пользователь должен сохранять изображение. Итак, сначала я вставил

  String savedImageURL = MediaStore.Images.Media.insertImage(
                        getContentResolver(),
                        bitmap,
                        "Bird",
                        "Image of bird"
                );

этот код, но он создает новый файл вместо перезаписи.

Поэтому я использую другой метод

public String saveImage(String folderName, String imageName) {
 String selectedOutputPath = "";
      if (isSDCARDMounted()) {
          File mediaStorageDir = new File(
                  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), folderName);
          // Create a storage directory if it does not exist
          if (!mediaStorageDir.exists()) {
              if (!mediaStorageDir.mkdirs()) {
                  Log.d("PhotoEditorSDK", "Failed to create directory");
              }
          }
          // Create a media file name
          selectedOutputPath = mediaStorageDir.getPath() + File.separator + imageName;
          Log.d("PhotoEditorSDK", "selected camera path " + selectedOutputPath);
     File file = new File(selectedOutputPath);
     try {
                    FileOutputStream out = new FileOutputStream(file,true);
                    if (parentView != null) {
                        parentView.setDrawingCacheEnabled(true);
                        parentView.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, out);
                    }
                    out.flush();
                    out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
     }
     return selectedOutputPath;
       }

Но это тоже не сработало.

Кто-нибудь знает о перезаписи одноименного растрового изображения?


person Dithesh    schedule 27.12.2017    source источник
comment
вы столкнулись с исключением или новым файлом?   -  person A.s.ALI    schedule 27.12.2017
comment
какую ошибку вы получаете?   -  person Nouman Ch    schedule 27.12.2017
comment
Я не получил ни одной ошибки ... все работает нормально, но изображение не перезаписывается в том же имени или файле. только первый сохраненный раздел вставляется в файл, второй не перезаписывается.   -  person Dithesh    schedule 27.12.2017


Ответы (2)


Передайте false в качестве второго аргумента, чтобы установить для добавления значение false, чтобы вы перезаписали существующий файл:

 FileOutputStream out = new FileOutputStream(file,false);

Посмотрите на конструктор документация:

вот ваш код:

public String saveImage(String folderName, String imageName) {
 String selectedOutputPath = "";
    if (isSDCARDMounted()) {
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), folderName);
      // Create a storage directory if it does not exist
      if (!mediaStorageDir.exists()) {
          if (!mediaStorageDir.mkdirs()) {
              Log.d("PhotoEditorSDK", "Failed to create directory");
          }
      }
      // Create a media file name
      selectedOutputPath = mediaStorageDir.getPath() + File.separator + imageName;
      Log.d("PhotoEditorSDK", "selected camera path " + selectedOutputPath);
 File file = new File(selectedOutputPath);

if (file.exists()) 
{
  try {
            file.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 try {
 file.createNewFile();
                FileOutputStream out = new FileOutputStream(file,false);
                if (parentView != null) {
                    parentView.setDrawingCacheEnabled(true);
                    parentView.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, out);
                }
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
 }
 return selectedOutputPath;
   }
person Vikas Suryawanshi    schedule 27.12.2017
comment
если вы хотите заменять файл каждый раз, просто удалите файл и создайте новый. - person Vikas Suryawanshi; 27.12.2017
comment
Я работаю над тем же файлом, не закрывая этот раздел ... сначала я добавляю наклейку, сохраняю изображение и загружаю его в галерею. он успешно сохранен, и я снова зашел в свое приложение, добавил еще одну наклейку и сохранил изображение. И я снова забил в галерею, изображение не меняется. Почему это происходит? - person Dithesh; 27.12.2017

У меня тоже была такая ситуация, но оказывается проблема не с сохранением, а с отображением в ImageViev. Я использовал Glide, и оказалось, что он сохраняется в кеше при выводе. И имя и путь к файлу я не менял. То есть я их переписал. Но Glide этого не знал. Он думал, что это один и тот же файл. Чтобы решить эту проблему, я добавил следующее

Glide.with(context)
     .load(file)
     .diskCacheStrategy(DiskCacheStrategy.NONE)
     .skipMemoryCache(true)
     .into(view)

Если у вас тоже есть такая ситуация, и эти решения вам помогли, я этому рад.

person Sardorbek Muhammadjonov    schedule 02.02.2021
comment
Спасибо! Это сработало для меня. :-D - person Ahsan Ullah Rasel; 22.04.2021