Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java MimetypesFileTypeMap always returning application/octet-stream on Android emulator

I am trying to determine the Mime/Media Type of files stored on an Android device (actually a virtual device I'm using with the emulator). I found this resource Get the MIME Type from a File which recommends the javax.activation.MimetypesFileTypeMap, however when I run the following code I get application/octet-stream for all file types:

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

I have tested this with files having the following extensions: jpg, txt, doc, xslx and pdf and they all return the same thing. Is there something I have to do to initialize the map? Can this library not find the list of supported mime-types on Android? Is there a better way to get the mime type of a file on Android?

like image 523
Ben Avatar asked Jan 31 '11 20:01

Ben


1 Answers

Had this problem as well. According to the Java Docs the MimetypesFileTypeMap searches

  1. Programmatically added entries to the MimetypesFileTypeMap instance.
  2. The file .mime.types in the user's home directory.
  3. The file /lib/mime.types
  4. The file or resources named META-INF/mime-types
  5. The file or resources named META-INF/mime-types.default (usually only found in the activation.jar file)

If your Mimetypes are all coming out as "application/octet-stream" this implies that you have none of the above files present (or they're present but incomplete) and have not added any entries to your MimetypesFileTypeMap instance.

To solve...

MimetypesFileTypeMap mimetypes specification format

# 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!
like image 103
HipsterCarlGoldstein Avatar answered Nov 02 '22 02:11

HipsterCarlGoldstein