Как сохранить растровое изображение в папке приложения в android - PullRequest
1 голос
/ 23 апреля 2020

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

 ContextWrapper contextWrapper = new ContextWrapper(context.getApplicationContext());
 File directory = contextWrapper.getDir("tabs", Context.MODE_PRIVATE);
 if (!directory.exists())
     directory.mkdir();
     String fname = "Image.jpg";
     File file = new File(directory, fname);
     FileOutputStream fos = null;
     try {
         fos = new FileOutputStream(file);
         bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fos);
         fos.close();
     } catch (Exception e) {
            Log.e("SAVE_IMAGE", e.getMessage(), e);
     }

Теперь у меня две проблемы.

  1. Почему отображается это предупреждение и как его исправить?

Результат 'File.mkdir ()' игнорируется

Каталог "app_tabs" был создан в папке приложения, но не сохранил растровое изображение и в папке нет фотографии. Как сохранить это растровое изображение?

ScreenShot

Ответы [ 4 ]

1 голос
/ 23 апреля 2020

Вы можете просто сделать это:

try {
     FileOutputStream fileOutputStream = context.openFileOutput("Your File Name", Context.MODE_PRIVATE);
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
     fileOutputStream.close();
 } catch (Exception e) {
     e.printStackTrace();
 }

Сохраняет ваше растровое изображение в каталоге "files" в папке приложения.

1 голос
/ 23 апреля 2020

Технически ваши коды верны, также я пробовал на своем собственном устройстве все правильно.

Так что я подозреваю, что вы нашли другой путь, или вам нужно нажать меню «Синхронизировать», если вы используете Android Studio для проверки файла.

Кстати, вы можете просто использовать context или context.getApplicationContext () для вызова getDir (), не нужно создавать ContextWrapper. как это:

File directory = context.getDir("tabs", Context.MODE_PRIVATE);
0 голосов
/ 23 апреля 2020

это мой ответ

  1. Result of 'File.mkdir()' is ignored: поскольку mkdir () возвращает логическое значение, true, если папка создана, и false в противном случае.

  2. Так я могу сохранить растровое изображение

        File storageDir = getFilesDir();

        File filePath = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );


        try (FileOutputStream out = new FileOutputStream(filePath)) {
            capturedImg.compress(Bitmap.CompressFormat.JPEG, quality, out);
        } catch (IOException e) {
            e.printStackTrace();
        }

или, если вы просто хотите сохранить растровое изображение в исходном разрешении

    public static void copy(Uri uri, File dst, Context context) {
        try (InputStream in = context.getContentResolver().openInputStream(uri);
             OutputStream out = new FileOutputStream(dst)) {
            // Transfer bytes from in to out
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
0 голосов
/ 23 апреля 2020
 String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/tabs";
        File dir = new File(path);
        if (!dir.exists())
            dir.mkdirs();

        File futureStudioIconFile = new File(path, "Image.jpg);
        if (futureStudioIconFile.exists())
            futureStudioIconFile.delete();
        futureStudioIconFile.createNewFile();

попробуйте это, я буду sh это помогает

...