我想知道文件是否音频(mp3
,aac
等),视频(mp4
,wmv
,3gp
等),文件(txt
,rtf
,doc
,docx
,xls
,xlsx
, ppt
,html
等)或未知(在不久的将来没有扩展和其他定制扩展特定于单个应用程序)如何知道文件类型?
我需要在Android中实现它。我想我可以找到文件的扩展名并确定它的类型?或者我不需要知道扩展名?
我只想知道文件类型。
我想知道文件是否音频(mp3
,aac
等),视频(mp4
,wmv
,3gp
等),文件(txt
,rtf
,doc
,docx
,xls
,xlsx
, ppt
,html
等)或未知(在不久的将来没有扩展和其他定制扩展特定于单个应用程序)如何知道文件类型?
我需要在Android中实现它。我想我可以找到文件的扩展名并确定它的类型?或者我不需要知道扩展名?
我只想知道文件类型。
您可以尝试使用guessContentTypeFromName()
猜测从文件扩展名的文件类型,或者你可以尝试使用猜测从内容的文件类型guessContentTypeFromStream()
。
如果你看看URLConnection.guessContentTypeFromStream的'源()'你会发现它只知道HTML,XML,zip文件和GIF图像。它不能识别问题要求的大部分文件类型。 'guessContentTypeFromName()'有一个更大的数据库,但是提问者明确要求识别没有扩展名的文件。 –
在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
}
}
}
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
}
}
可以使用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());
}
找出文件扩展名的捷径就是利用lastIndexOf('.')
假设文件名包含扩展。请检查下面的代码
String fileName = "test.jpg";
int i = fileName.lastIndexOf('.');
String fileExtension = fileName.substring(i+1);
Log.v("FILE EXTENSION: ",fileExtension);
我曾经被张贴作为一个答案这里的类:http://stackoverflow.com/a/10140531/293280 –