【问题标题】:How to Save bitmap to app folder in android如何将位图保存到android中的应用程序文件夹
【发布时间】:2020-04-23 08:44:40
【问题描述】:

我有一个位图,我想将它保存到 app 文件夹中。我尝试使用这些代码:

 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()' 的结果被忽略

  1. 在应用程序文件夹中创建了目录“app_tabs”,但未保存位图并且文件夹中没有照片。如何保存此位图?

【问题讨论】:

  • 更好:if (!directory.exists()) if (!directory.mkdir()){toast could not make directory... return;}.
  • Why this warning show ?哪个警告?
  • @blackapps “File.mkdir()”的结果被忽略
  • 如何检查文件是否存在?
  • 被忽略了吗?你为什么要?忽略意味着代码写得不好。

标签: java android android-file


【解决方案1】:

你可以这样做:

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();
 }

它将您的位图保存在应用文件夹的“文件”目录中。

【讨论】:

  • 谢谢!它的工作并保存了我的图像。但是,如何将其保存在另一个文件夹中?
  • 我检查了你的代码,我认为是正确的。正如fujian26所说,您需要单击“同步”菜单。
  • 保存Bitmap的路径是什么?如何获得?
【解决方案2】:

从技术上讲,您的代码是正确的,我也曾在自己的设备上尝试过,一切都是正确的。

所以我怀疑您找到了其他路径,或者如果您使用 Android Studio 检查文件,则需要单击“同步”菜单。

顺便说一句,你可以直接使用 context 或 context.getApplicationContext() 来调用 getDir(),不需要 new ContextWrapper。像这样:

File directory = context.getDir("tabs", Context.MODE_PRIVATE);

【讨论】:

    【解决方案3】:
     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();
    

    试试这个,希望对你有帮助

    【讨论】:

    • 感谢您的宝贵时间,但我想将我的位图保存在 app 文件夹目录中,而不是在下载文件夹中。我的问题不是创建目录,而是能够创建目录。我无法将位图保存在根文件(app 文件夹)中创建的文件夹中。
    • \\ 不客气..我仍在努力寻找答案.....您正在使用 contextgetApplicationContext ..为什么 ? ,, 我认为你必须删除 context 并重试
    • \\ contextWrapper.getDir() 如果文件夹不存在则创建该文件夹,因此调用 mkdir() 是多余的 .. 所以 'File.mkdir()' 的结果被忽略
    【解决方案4】:

    这是我的答案

    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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2018-08-30
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多