2011-01-31 44 views
9

Estoy tratando de determinar el tipo MIME/Media de archivos almacenados en un dispositivo Android (en realidad un dispositivo virtual que estoy usando con el emulador). He encontrado este recurso Get the MIME Type from a File que recomienda el javax.activation.MimetypesFileTypeMap, sin embargo cuando funciono el siguiente código consigo application/octet-stream para todos los tipos de archivos:Java MimetypesFileTypeMap siempre devuelve application/octet-stream en el emulador de Android

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

He probado esto con los archivos que tengan las siguientes extensiones: jpg, txt, doc, xslx y pdf y todos devuelven lo mismo. ¿Hay algo que deba hacer para inicializar el mapa? ¿Esta biblioteca no puede encontrar la lista de tipos de mime compatibles en Android? ¿Hay una mejor manera de obtener el tipo de mimo de un archivo en Android?

+0

estoy teniendo el mismo problema (androide no está involucrado), véase este enlace http://stackoverflow.com/questions/ 6308142/adding-mimetypes-to-mimetypesfiletypemap. Creo que tenemos que agregar un archivo reosurce con una lista completa de tipos de mime, aún no probado, sin embargo –

Respuesta

13

Tenía este problema también. De acuerdo con el Java Docs la MimetypesFileTypeMap busca

  1. asientos secundarios mediante programación a la instancia MimetypesFileTypeMap.
  2. El archivo .mime.types en el directorio de inicio del usuario.
  3. El archivo /lib/mime.types
  4. El archivo o recursos con nombre META-INF/MIME tipos
  5. El archivo o los recursos llamado META-INF/mime-types.default (por lo general sólo se encuentran en la activación archivo .jar)

Si sus Tipos MIME están saliendo como "application/octet-stream" esto implica que usted no tiene ninguno de los archivos anteriores presentes (o están presentes pero incompleta) y no ha añadido ningún entradas a su instancia MimetypesFileTypeMap.

Para resolver ...

MimetypesFileTypeMap formato de especificación de tipos MIME

# 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! 
+0

Lo intenté ... ¡Funcionó! ¡¡¡Gracias!!! –

+0

Según la documentación de MimetypesFileTypeMap, el formato de archivo exacto es el siguiente: ** text/plain txt text TXT ** (Lo siento, no puedo formatear esto. :() – MGM

Cuestiones relacionadas