如何知道文件类型?
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);
【讨论】:
以上是关于如何知道文件类型?的主要内容,如果未能解决你的问题,请参考以下文章