Получить расширение файла из изображений, выбранных из галереи или камеры, в виде строки - PullRequest
28 голосов
/ 18 марта 2012

Я хочу получить в качестве строки расширение изображения (например, «jpg», «png», «bmp» и т. Д.) Изображений, загруженных из галереи или выбранных с камеры.

Я использовал метод в этой форме для загрузки изображений из галереи

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

Ответы [ 8 ]

62 голосов
/ 18 марта 2012
 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

или

 filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png
15 голосов
/ 09 апреля 2016

Я знаю, что уже довольно поздно, но для тех, у кого все еще есть проблема, когда getContentResolver (). GetType (uri) возвращает ноль, когда путь содержит пробелы. Это также решает проблему, когда изображение открывается через Диспетчер файлов вместо галереи. Этот метод возвращает расширение файла (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;
}
6 голосов
/ 12 мая 2017
getContentResolver().getType(theReceivedUri);

Приведенный выше фрагмент кода дает вам тип «media / format»

5 голосов
/ 18 марта 2012

Я думаю, что это должно привести вас туда, где вы хотите (я не пробовал, просто прочитал немного вокруг, и я думаю, что это работает).

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();
4 голосов
/ 25 августа 2015

у вас есть несколько вариантов, чтобы получить расширение файла: например:

1- String filename = uri.getLastPathSegment(); посмотреть эту ссылку

2 - вы также можете использовать этот код

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

но это не очень хороший пример.

3 - если у вас есть URI файла, используйте этот код

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

4 - если у вас есть URL, используйте этоткод

public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
    type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}
0 голосов
/ 12 июня 2018

Дорогой друг, мы можем найти расширение любого файла, изображения, видео и любых документов. для этого.

Сначала мы создадим метод GetFileExtension, который мы хотим вызвать, чтобы найти расширение файла, изображения, данных и документов. Здесь я взял переменную с именем:

Uri videouri = data.getData();

in 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% уверен, что это будет работать для всех вас, кто делает корпоративное приложение. Если хотите, проголосуйте за меня ..

0 голосов
/ 17 мая 2013

Я думаю, что это должно использовать MediaStore.MediaColumns.MIME_TYPE

String[] projection = { MediaStore.MediaColumns.DATA,
        MediaStore.MediaColumns.MIME_TYPE };
0 голосов
/ 18 марта 2012

, если вы получите content://media Uris в качестве результата и вы хотите расширение, тогда вам нужно запросить базу данных, как вы делаете, и извлечь, если из filePath. Например. с это

Чтобы вывести имя файла из полного пути, самое простое решение -

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