我试图确定存储在Android设备(实际上是我与模拟器一起使用的虚拟设备)上的文件的Mime/Media Type。我找到了推荐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,它们都返回相同的内容。我需要做些初始化 map 的事情吗?该库找不到Android上受支持的mime类型列表吗?有没有更好的方法来获取Android上文件的mime类型?
最佳答案
也有这个问题。根据Java Docs,MimetypesFileTypeMap进行搜索
如果您的Mimetypes全部以“application/octet-stream”的形式出现,则意味着您没有上述任何文件存在(或它们存在但不完整),并且没有向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!