如何知道文件类型?

Posted

技术标签:

【中文标题】如何知道文件类型?【英文标题】:How to know the filetype? 【发布时间】:2012-09-15 15:56:50 【问题描述】:

我想知道文件是音频mp3,aac等),视频mp4,wmv,@987654326 @等),文档txt,rtf,doc,docx,xls,xlsx,ppt,html等)或未知(在不久的将来没有扩展和其他特定于单个应用程序的自定义扩展)

我需要在 android 中实现它。我想我可以找到文件的扩展名并识别它的类型?或者我不需要知道扩展名?

我只想知道文件类型。

【问题讨论】:

我在这里使用了作为答案发布的课程:***.com/a/10140531/293280 【参考方案1】:

在 Android 上,您可以尝试以下操作:

File f = <YOUR FILE>

String path = f.getAbsolutePath();
String fileExtension = null;
int dotPos = path.lastIndexOf('.');
if (0 <= dotPos) 
    fileExtension = path.substring(dotPos + 1);


if (!TextUtils.isEmpty(fileExtension )) 
    String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension.toLowerCase());
    if (!TextUtils.isEmpty(mime)) 
        if (mime.startsWith("text")) 
        // TEXT FILE
         else if (mime.startsWith("image")) 
        // IMAGE FILE
        
    

【讨论】:

【参考方案2】:

您可以尝试使用guessContentTypeFromName() 从文件扩展名中猜测文件类型,也可以尝试使用guessContentTypeFromStream() 从内容中猜测文件类型。

【讨论】:

如果您查看URLConnection.guessContentTypeFromStream() 的源代码,您会发现它只知道HTML、XML、zip 文件和GIF 图像。它无法识别问题要求的大多数文件类型。 guessContentTypeFromName() 有更大的数据库,但提问者特意要求识别没有扩展名的文件。【参考方案3】:
import java.net.FileNameMap;
import java.net.URLConnection;

public class FileUtils 

public static String getMimeType(String fileUrl)
  throws java.io.IOException 
      FileNameMap fileNameMap = URLConnection.getFileNameMap();
      String type = fileNameMap.getContentTypeFor(fileUrl);

     return type;


public static void main(String args[]) throws Exception 
      System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));
     // output :  text/plain
   

http://www.rgagnon.com/javadetails/java-0487.html

【讨论】:

【参考方案4】:

您可以使用mime-util 库。我的示例代码将获取文件的 mime 类型。

    String imagePath = "/tmp/test.txt";
    File file = new File(imagePath);

    if (MimeUtil.getMimeDetector(MagicMimeMimeDetector.class.getName()) == null)  
        MimeUtil.registerMimeDetector(MagicMimeMimeDetector.class.getName());
    
    Collection<MimeType> mimeTypes = MimeUtil.getMimeTypes(file);
    for (MimeType mimeType : mimeTypes) 
        System.out.println(mimeType.getMediaType());
    

【讨论】:

【参考方案5】:

找出文件扩展名的最短方法是使用lastIndexOf('.') 假设文件名包含扩展名。检查以下代码

String fileName = "test.jpg";
int i = fileName.lastIndexOf('.');
String fileExtension = fileName.substring(i+1);
Log.v("FILE EXTENSION: ",fileExtension);

【讨论】:

以上是关于如何知道文件类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定文件的文件类型(文档类型/UTI)

如何正确检测 PHAsset 的文件类型 (GIF)

如何检查文件中的数据类型

BAT文件里如何设置删除一种类型的全部文件?

如何根据文件名预测文件的 MIME 类型?

如何在角度材料中使用输入类型文件