Java MimetypesFileTypeMap始终在Android模拟器上返回应用程序/八位字节流

我正在尝试确定存储在 Android设备上的Mime / Media类型(实际上是与仿真器一起使用的虚拟设备).我发现这个资源 Get the MIME Type from a File推荐了javax.activation.MimetypesFileTypeMap,但是当我运行以下代码时,我获得所有文件类型的应用程序/八位字节流
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类型?

解决方法

还有这个问题.根据Java文档,MimetypesFileTypeMap搜索

>以编程方式将条目添加到MimetypesFileTypeMap实例.
>用户主目录中的文件.mime.types.
>文件/lib/mime.types
>名为meta-inf / mime-types的文件或资源
>名为meta-inf / mime-types.default的文件或资源(通常只在activation.jar文件中找到)

如果您的Mimetypes全部出现为“应用程序/八位字节流”,这意味着您没有上述任何文件存在(或者它们存在但不完整),并且没有向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!

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...