我想知道文件是音频(mp3
、aac
等)、视频(、、、等mp4
)wmv
、文档3gp
(、、、、、、、、等txt
)rtf
还是未知(没有扩展名和其他特定于单个应用程序的自定义扩展名)不久的将来)doc
docx
xls
xlsx
ppt
html
我需要在 Android 中实现它。我想我可以找到文件的扩展名并识别它的类型?或者我不需要知道扩展名?
我只想知道文件类型。
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
}
}
在 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
}
}
}
您可以使用 尝试从文件扩展名中猜测文件类型guessContentTypeFromName()
,也可以使用 尝试从内容中猜测文件类型guessContentTypeFromStream()
。
您可以使用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);