从图库或相机中选取的图像中获取文件扩展名,作为字符串

时间:2012-03-18 12:05:42

标签: android android-camera android-gallery

我希望将从图库加载或从相机中拾取的图像的图像扩展名(例如“jpg”,“png”,“bmp”ecc。)作为字符串。

我已使用此表单中的方法从图库中加载图片

    private static final int SELECT_PICTURE_ACTIVITY_REQUEST_CODE = 0;
....
private void selectPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, SELECT_PICTURE_ACTIVITY_REQUEST_CODE);
}
....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
        case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                if (cursor.moveToFirst()) {
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    Bitmap bitmap = BitmapFactory.decodeFile(filePath);
                    .........
                }
                cursor.close();
            }
            break;
    }
}

9 个答案:

答案 0 :(得分:62)

 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

 filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png

答案 1 :(得分:15)

我知道它已经很晚但是对于那些在getContentResolver()时仍然有问题的人。当路径包含空格时,getType(uri)返回null。当通过文件管理器而不是图库打开图像时,这也解决了这个问题。此方法返回文件的扩展名(jpg,png,pdf,epub等..)。

 public static String getMimeType(Context context, Uri uri) {
    String extension;

    //Check uri format to avoid null
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
        //If scheme is a content
        final MimeTypeMap mime = MimeTypeMap.getSingleton();
        extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
    } else {
        //If scheme is a File
        //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
        extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());

    }

    return extension;
}

答案 2 :(得分:5)

我认为这应该可以让你到达你想要的地方(我没有尝试过,只是阅读一下,我认为它有效)。

Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA, 
                           MediaStore.Images.Media.DISPLAY_NAME};
Cursor cursor =
     getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor.moveToFirst()) {
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    Bitmap bitmap = BitmapFactory.decodeFile(filePath);
    int fileNameIndex = cursor.getColumnIndex(filePathColumn[1]);
    String fileName = cursor.getString(fileNameIndex);
    // Here we get the extension you want
    String extension = fileName.replaceAll("^.*\\.", ""); 
    .........
}
cursor.close();

答案 3 :(得分:5)

String script = "function genData(dataModel) { return 'hello world '+ dataModel.url.value + ' done'; }";  

//"{url : {value : "abc.com",type  : "string"},layout : {value : "",type  : "string"}}";  

String dataModel = "{url : {value : \"abc.com\",type  : \"string\"},layout : {value : \"\",type  : \"string\"}}";

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Invocable inv = (Invocable) engine;
result = inv.invokeFunction("genData", dataModel);

以上代码段为您提供"媒体/格式"

的类型

答案 4 :(得分:4)

您有多种选择来获取文件扩展名:例如:

1 - String filename = uri.getLastPathSegment();请参阅此link

2-您也可以使用此代码

 filePath .substring(filePath.lastIndexOf(".")+1);

但这不是好事。

3 - 如果你有文件的URI,那么使用这个代码

String[] projection = { MediaStore.MediaColumns.DATA,
    MediaStore.MediaColumns.MIME_TYPE };

4 - 如果您有网址,请使用此代码

public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
    type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}

答案 5 :(得分:0)

如果您得到content://media Uris,并且您想要扩展,那么您必须像查询数据库一样查询数据库,并从filePath中提取。例如。 this

要从完整路径中获取文件名,最简单的解决方案是

String filename = (new File(filePath)).getName();

答案 6 :(得分:0)

我认为这应该使用MediaStore.MediaColumns.MIME_TYPE

String[] projection = { MediaStore.MediaColumns.DATA,
        MediaStore.MediaColumns.MIME_TYPE };

答案 7 :(得分:0)

亲爱的朋友,我们可以找到任何文件,图片,视频和任何文档的扩展名。 对此。

首先,我们将创建一个方法GetFileExtension,我们要调用它来查找文件,图像,数据和文档的扩展名。这里我拿了一个名为:

的变量
Uri videouri = data.getData();

OnActivity结果中,然后我在

中调用它
onclick(View view)
{
    GetFileExtension(videouri);
    Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();
}

现在将一个类创建为类GetFileExtension

// Get Extension
public String GetFileExtension(Uri uri)
{
        ContentResolver contentResolver=getContentResolver();
        MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();

        // Return file Extension
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}

由于这种方法,我们可以找到java和android中任何文件的扩展名。 我100%肯定它将适用于所有正在制作企业应用程序的人。 如果你愿意,那就投票给我..

答案 8 :(得分:0)

对于“content://”sheme

fun Uri.getFileExtension(context: Context): String? {
    return MimeTypeMap.getSingleton()
        .getExtensionFromMimeType(context.contentResolver.getType(this))
}