我正在尝试确定存储在
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!