【问题标题】:how to get mime type of a file,which has dot in the file name on android如何获取文件的mime类型,在android上的文件名中有点
【发布时间】:2012-07-13 08:00:15
【问题描述】:

我使用以下代码获取文件的 mime 类型:

    private String getMimeType(String url) {

        String type = null;
        String extension = MimeTypeMap.getFileExtensionFromUrl(url);
        Log.e("extension ", extension);

        if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);
        }
        return type;
    }

   where url is the absolute file path

    i am getting file and folder by the following way
    File file_arr [];
    file_arr = new   File(Environment.getExternalStorageDirectory().getPath()).listFiles();
    url = file_arr[i].getAbsolutePath();

这是正确的,但它对于文件名中有点“.”的文件总是返回 null。

举个例子

如果文件名是 picture1.jpg 那么 getMimeType() 返回 image/jpeg

如果文件名中包含点 (.),例如 27-05-2012 22.05.14.jpg,则 getMimeType() 返回 null。

我已将文件重命名为 27-05-2012.jpg,它的返回图像/jpeg。

我的问题是如何在 android 上获取所有类型的文件名(具有点或特殊字符)的 mime 类型?请帮我。

【问题讨论】:

  • 文件名中有点时 MimeTypeMap.getFileExtensionFromUrl(url) 返回的值是多少?如果从第一个点开始,请尝试自己解析扩展。
  • @murali_ma 问题在于空白空间,如果消除它会起作用。

标签: android mime-types filenames android-file


【解决方案1】:

这个怎么样:

File f = new File(file);
System.out.println(new MimetypesFileTypeMap().getContentType(f));

或者

   if(url.lastIndexOf(".") != -1) {
    String ext = url.substring(url.lastIndexOf(".")+1);
    MimeTypeMap mime = MimeTypeMap.getSingleton();
    String type = mime.getMimeTypeFromExtension(ext);
   } else {
    String type = null;
   }

【讨论】:

  • 别忘了检查 lastIndexOf != -1。
  • 感谢@TamásSzincsák 指出:)
  • 第一个答案引发了 TypeCast 异常,但第二个答案工作正常。
【解决方案2】:
private String getMimeType(String url) {

    String fileExtension = MimeTypeMap.getFileExtensionFromUrl(url);
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
            fileExtension);
    Toast.makeText(
            this,
            "FileExtension: " + fileExtension + "\n" + "MimeType: "
                    + mimeType, Toast.LENGTH_LONG).show();
    return mimeType;
}

问题在于您的文件名之间有空格,请尝试使用此代码获取任何具有 ("." 、 "-" 、 "_" ) 等的文件的 mime 类型...

试试这个,即使它会工作:27-05-20.....1222.05.14.jpg

【讨论】:

  • 这不适用于包含空格的文件名。文件扩展为空。
猜你喜欢
  • 2013-09-11
  • 2010-09-30
  • 2016-05-19
  • 2014-06-14
  • 2012-03-18
  • 2011-04-20
  • 2018-12-01
  • 2014-01-30
相关资源
最近更新 更多