【问题标题】:How do i save an image in external storage gallery in android如何将图像保存在 android 的外部存储库中
【发布时间】:2012-10-19 03:39:55
【问题描述】:

我正在尝试将图像文件写入特定目录中的公共图库文件夹,但我不断收到错误消息,因为它是一个目录,所以无法打开该文件。

到目前为止,我有以下内容

//set the file path
    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;

    File outputFile = new File(path,"testing.png");


    outputFile.mkdirs();

    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

其中目录是应用程序名称。所以应用程序保存的所有照片都会进入该文件夹/目录,但我一直收到错误

/storage/sdcard0/Pictures/appname/testing.png: open failed: EISDIR (Is a directory)

即使我不尝试将其放在目录中并将变量路径转换为类似文件

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

我没有收到错误,但照片仍未显示在图库中。

***回答 问题是,当我最初运行此代码时,它创建了一个名为 testing.png 的目录,因为在目录中创建文件之前我未能创建目录。所以解决方案是先制作目录,然后用一个单独的文件写入它,像这样

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + File.separator + directory;

//directory is a static string variable defined in the class

            //make a file with the directory
    File outputDir = new File(path);

            //create dir if not there
    if (!outputDir.exists()) {
         outputDir.mkdir();

    }

            //make another file with the full path AND the image this time, resized is a static string
    File outputFile = new File(path+File.separator+resized);

    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

请注意,如果您犯了与我开始时相同的错误,您可能需要进入存储并手动删除目录

【问题讨论】:

标签: android android-sdcard android-image


【解决方案1】:

您正在尝试写入目录而不是文件。 试试这个

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;   
File outputDir= new File(path);   
outputDir.mkdirs();   
File newFile = new File(path + File.separator + "test.png");
FileOutputStream out = new FileOutputStream(newFile);   
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);   

【讨论】:

  • 发生的事情是我的代码将完整路径写成一个目录。所以我有一个名为“testing.png”的目录,而不是尝试将位图写入该目录。这个方法有效
【解决方案2】:

你的代码是正确的,只需要稍作改动如下,

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;

    // First Create Directory
    File outputFile = new File(path);
    outputFile.mkdirs();

    // Now Create File
    outputFile = new File(path,"testing.png");
    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

另外不要忘记在您的 AndroidManifest.xml 文件中授予 WRITE_EXTERNAL_STORAGE 权限。

【讨论】:

    【解决方案3】:

    如果您在使用 Android 模拟器时遇到此错误;您需要在模拟器上启用 SD 卡存储。

    【讨论】:

      【解决方案4】:
      public static String SaveImage(Bitmap finalBitmap) {
      
              String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
              File myDir = new File(root + "/FolderName");
              if(!myDir.exists())
                  myDir.mkdirs();
              Random generator = new Random();
              int n = 10000;
              n = generator.nextInt(n);
              String fname = "Image-"+ n +".png";
              File file = new File (myDir, fname);
              if (file.exists ()) file.delete ();
              try {
                  FileOutputStream out = new FileOutputStream(file);
                  finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                  out.flush();
                  out.close();
      
              } catch (Throwable e) {
                  e.printStackTrace();
              }
              return file.getAbsolutePath();
          }
      

      【讨论】:

        【解决方案5】:

        getExternalStoragePublicDirectory 现已弃用,您应该使用

        context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
        

        【讨论】:

        • 我不知道,会毫无意义地花时间。谢谢!
        【解决方案6】:

        这样使用:

        bitmap.compress(CompressFormat.JPEG, 100,  new FileOutputStream("/mnt/sdcard/" + new Date().getTime() + ".jpg"));`
        

        Path : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + file name

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-17
          • 2015-09-24
          • 2013-10-28
          • 2018-04-20
          • 1970-01-01
          • 1970-01-01
          • 2015-06-14
          • 1970-01-01
          相关资源
          最近更新 更多