Java MimetypesFileTypeMap всегда возвращает приложение / октет-поток на эмуляторе Android - PullRequest
9 голосов
/ 31 января 2011

Я пытаюсь определить тип файлов Mime / Media, хранящихся на устройстве Android (фактически виртуальное устройство, которое я использую с эмулятором). Я нашел этот ресурс Получить MIME-тип из файла , который рекомендует javax.activation.MimetypesFileTypeMap, однако, когда я запускаю следующий код, я получаю application/octet-stream для всех типов файлов:

MimetypesFileTypeMap map = new MimetypesFileTypeMap();  
File dir = Environment.getExternalStorageDirectory();  
File[] files = dir.listFiles();  
String mimeType;  
for( int i = 0; i < files.length; ++i ) {  
    if( files[i].isDirectory() == false ) {  
        mimeType = map.getContentType(files[i]);  
        if( mimeType.toLowerCase().equals("application/octet-stream") ) {  
            Log.d("mytag", 
                String.format( "Unable to determine the mime type of file %s.",
                files[i].getName()));  
        }   
    }  
}  

Я проверил это с файлами, имеющими следующие расширения: jpg, txt, doc, xslx и pdf, и все они возвращают одно и то же. Что мне нужно сделать, чтобы инициализировать карту? Может ли эта библиотека не найти список поддерживаемых mime-типов на Android? Есть ли лучший способ получить файл MIME на Android?

1 Ответ

13 голосов
/ 17 июля 2012

Была и эта проблема.Согласно Java-документам MimetypesFileTypeMap ищет

  1. Программно добавленные записи в экземпляре MimetypesFileTypeMap.
  2. Файл .mime.types в домашнем каталоге пользователя.
  3. file /lib/mime.types
  4. Файл или ресурсы с именем META-INF / mime-types
  5. Файл или ресурсы с именем META-INF / mime-types.default (обычно находятся только вфайл Activation.jar)

Если все ваши Mimetypes выходят как «application / octet-stream», это означает, что у вас нет ни одного из перечисленных выше файлов (или они присутствуют, но не завершены)и не добавили никаких записей в ваш экземпляр MimetypesFileTypeMap.

Чтобы решить ...

Формат спецификации MimetypesFileTypeMap mimetypes

# comments start with hash marks
# format is <mime type> <space separated file extensions>
# for example, for an image mime type and a text mime type
image png tif jpg jpeg bmp
text  txt text rtf TXT
# either place those lines within the files specified by 2-4 or

MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap();
mtftp.addMimeTypes("image png tif jpg jpeg bmp")

# and it's as easy as that!
...