Java 如何知道文件类型?

Java 如何知道文件类型?,java,android,file,file-type,Java,Android,File,File Type,我想知道该文件是否为音频(mp3,aac等)、视频(mp4,wmv,3gp等),文档(txt,rtf,doc,docx,xls,xlsx,ppt,html等)或未知(近期没有特定于单个应用程序的扩展和其他自定义扩展) 我需要在Android中实现它。我想我可以找到文件的扩展名并识别它的类型?或者我不需要知道扩展名 我只想知道文件类型。在Android上,您可以尝试以下内容: File f = <YOUR FILE> String path = f.getAbsolutePath()

我想知道该文件是否为音频
mp3
aac
等)、视频
mp4
wmv
3gp
等),文档
txt
rtf
doc
docx
xls
xlsx
ppt
html
等)或未知(近期没有特定于单个应用程序的扩展和其他自定义扩展)

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


我只想知道文件类型。

在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
        }
    }
}
文件f=
字符串路径=f.getAbsolutePath();
字符串fileExtension=null;
int dotPos=path.lastIndexOf('.');

如果(0在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
        }
    }
}
文件f=
字符串路径=f.getAbsolutePath();
字符串fileExtension=null;
int dotPos=path.lastIndexOf('.');

如果(0您可以尝试使用从文件扩展名猜测文件类型,也可以尝试使用从内容猜测文件类型。

您可以尝试使用从文件扩展名猜测文件类型,也可以尝试使用从内容猜测文件类型

您可以使用库。我的示例代码将获取文件的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());
    }
String imagePath=“/tmp/test.txt”;
文件文件=新文件(imagePath);
if(MimeUtil.getMimeDetector(MagicMimeMimeDetector.class.getName())==null){
registerimedetector(MagicMimeMimeDetector.class.getName());
}
集合mimeTypes=MimeUtil.getMimeTypes(文件);
用于(MimeType MimeType:mimeTypes){
System.out.println(mimeType.getMediaType());
}
您可以使用库。我的示例代码将获取文件的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());
    }
String imagePath=“/tmp/test.txt”;
文件文件=新文件(imagePath);
if(MimeUtil.getMimeDetector(MagicMimeMimeDetector.class.getName())==null){
registerimedetector(MagicMimeMimeDetector.class.getName());
}
集合mimeTypes=MimeUtil.getMimeTypes(文件);
用于(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);

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

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

如果您查看
URLConnection.guessContentTypeFromStream()
的源代码,您会发现它只知道HTML、XML、zip文件和GIF图像。它无法识别问题要求的大多数文件类型。
guessContentTypeFromName()
有一个更大的数据库,但提问者特别要求识别没有扩展名的文件。如果您查看
URLConnection.guessContentTypeFromStream()的源代码
您将看到它只知道HTML、XML、zip文件和GIF图像。它无法识别问题要求的大多数文件类型。
guessContentTypeFromName()
有一个更大的数据库,但提问者特别要求识别没有扩展名的文件。我在这里使用了作为答案发布的类:我在这里使用了作为答案发布的类: