【问题标题】: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 中实现它。我想我可以找到文件的扩展名并识别它的类型?或者我不需要知道扩展名?

我只想知道文件类型。

【问题讨论】:

标签: java android file file-type


【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 2014-05-10
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-11
          • 2012-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多