Java MimetypesFileTypeMap始终在Android模拟器上返回application / octet-stream

时间:2011-01-31 20:16:35

标签: java android mime-types

我正在尝试确定存储在Android设备上的Mime / Media类型的文件(实际上是我正在使用模拟器的虚拟设备)。我找到了推荐javax.activation.MimetypesFileTypeMap的资源Get the MIME Type from a File,但是当我运行以下代码时,我得到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,它们都返回相同的内容。我有什么需要做的来初始化地图吗?这个库可以找不到Android上支持的mime类型列表吗?有没有更好的方法来获取Android上的mime类型的文件?

1 个答案:

答案 0 :(得分:13)

也有这个问题。根据Java Docs,MimetypesFileTypeMap搜索

  1. 以编程方式将条目添加到MimetypesFileTypeMap实例。
  2. 用户主目录中的.mime.types文件。
  3. 文件/lib/mime.types
  4. 名为META-INF / mime-types
  5. 的文件或资源
  6. 名为META-INF / mime-types.default的文件或资源(通常只能在activation.jar文件中找到)
  7. 如果您的Mimetypes全部以“application / octet-stream”形式出现,则表示您没有上述文件(或者它们存在但不完整)并且未向MimetypesFileTypeMap实例添加任何条目。 / p>

    要解决......

    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!