【问题标题】:How to get Directory and file name of an image selected from gallery如何获取从图库中选择的图像的目录和文件名
【发布时间】:2014-11-03 19:44:15
【问题描述】:

我需要使用这个功能,

java.io.File.File(文件目录,字符串名称)

公共文件(文件目录,字符串名称)

在 API 级别 1 中添加 使用指定的构造一个新文件 目录和名称。参数 dir 文件所在的目录 存储。命名文件的名称。如果 name 是,则抛出 NullPointerException 空。

现在我们可以看到它需要文件目录和名称作为参数。现在我正在按意图从画廊中选择一张图片。如何获取所选文件的目录和名称?

这里是sn-p:

public File String_to_File(String img_url) {

        try {
            File rootSdDirectory = Environment.getExternalStorageDirectory();

---------------------------------------------------------------------------------------
            **casted_image = new File(rootSdDirectory, "attachment.jpg");**
---------------------------------------------------------------------------------------

            if (casted_image.exists()) {
                casted_image.delete();
            }
            casted_image.createNewFile();

            FileOutputStream fos = new FileOutputStream(casted_image);

            URL url = new URL(img_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.connect();
            InputStream in = connection.getInputStream();

            byte [ ] buffer = new byte [1024];
            int size = 0;
            while ((size = in.read(buffer)) > 0) {
                fos.write(buffer, 0, size);
            }
            fos.close();
            return casted_image;

        } catch (Exception e) {

            System.out.print(e);
            // e.printStackTrace();

        }
        return casted_image;
    }

    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

         if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
             Uri selectedImage = data.getData();
             String[] filePathColumn = { MediaStore.Images.Media.DATA };

             Cursor cursor = getContentResolver().query(selectedImage,
                     filePathColumn, null, null, null);
             cursor.moveToFirst();

             int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
             String picturePath = cursor.getString(columnIndex);
             cursor.close();

             iv.setImageURI(selectedImage);

             // String picturePath contains the path of selected Image
         }
    }

应该怎么做才能将正确的参数传递给行之间的函数?

我引用的是 sharing-text-image-in-twitter-android-example 。一切都很好,除了我想使用我自己选择的图像而不是他的 URL 图像。请帮忙。

【问题讨论】:

  • 我不是从 URL 中获取图像,我现在是从图库中选择它。所以我需要所选文件的目录和名称。
  • 你有String picturePath = cursor.getString(columnIndex);这是路径,你可以创建一个类成员变量并分配cursor.getString(columnIndex);给它。然后在String_to_File(String img_url)访问它

标签: java android file path dir


【解决方案1】:

EXTRA_ALLOW_MULTIPLE 选项是通过Intent.putExtra() 方法在意图上设置的:

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

上面的代码应该是这样的:

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE );
//intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

注意:EXTRA_ALLOW_MULTIPLE 选项仅在 Android API 18 及更高版本中可用。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE  && resultCode == RESULT_OK && null != data) {
    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    Cursor cursor = getContentResolver().query(selectedImage,
         filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    casted_image = new File(picturePath);
    cursor.close();
    // String picturePath contains the path of selected Image
  }
}

【讨论】:

    【解决方案2】:

    你可以这样做。

    File selectedFile = Environment.getExternalStorageDirectory();
    File parentDir = selectedFile.getParentFile();
    
    casted_image = new File(parentDir, "attachment.jpg");
    

    或者如果你想传递选定的文件名而不是特定的文件名。使用以下行。

    casted_image = new File(parentDir, selectedFile.getName());
    

    你也可以通过selectedFile.isFile();来检查选中的文件是目录还是普通文件 &selectedFile.isDirectory();

    【讨论】:

    猜你喜欢
    • 2022-09-24
    • 2011-07-23
    • 2014-07-09
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多