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

2023-11-22

我正在尝试确定 Android 设备(实际上是我与模拟器一起使用的虚拟设备)上存储的文件的 Mime/媒体类型。我找到了这个资源从文件中获取 MIME 类型其中推荐了javax.activation.MimetypesFileTypeMap,但是当我运行以下代码时我得到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 类型?


也遇到了这个问题。根据 Java 文档,MimetypesFileTypeMap 搜索

  1. 以编程方式将条目添加到 MimetypesFileTypeMap 实例。
  2. 用户主目录中的文件 .mime.types。
  3. 文件 /lib/mime.types
  4. 名为 META-INF/mime-types 的文件或资源
  5. 名为 META-INF/mime-types.default 的文件或资源(通常仅在activation.jar 文件中找到)

如果您的 Mimetype 全部以“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!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java MimetypesFileTypeMap 在 Android 模拟器上始终返回 application/octet-stream 的相关文章

随机推荐