在Java中识别特定文件类型的最佳方法是什么?

时间:2012-03-12 15:34:59

标签: java file-type

我正在尝试使用以下方法使用Java识别特定的文件类型。我需要在我的Web应用程序中实现这些功能。

package filetype;

import java.io.File;
import java.net.URLConnection;

final public class FileType
{
    public static void main(String[] args)
    {
        File temp=new File("G:/mountain.jpg");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/myFile.txt");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/zipByJava.zip");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/MLM/Login.aspx");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/power_point.pptx");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/excel_sheet.xlsx");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));

        temp=new File("G:/word_document.docx");
        System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
    }
}

它在控制台上显示以下输出。

image/jpeg
text/plain
application/zip
null
null
null
null

在最后四种情况下,它显示null并且无法识别给定文件的文件类型。在Java中识别特定文件类型的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

使用

Files.probeContentType() 

http://openjdk.java.net/projects/nio/javadoc/java/nio/file/Files.html#probeContentType(java.nio.file.Path)

为您认为会遇到的任何奇怪的球类型添加自定义探测器。

编辑:

这是oracle JavaDoc for v7

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#probeContentType(java.nio.file.Path)

答案 1 :(得分:0)

这是我使用外部活动打开文件的方法:

private void openFileWithExternalActivity(String path) {
    if (path == null) {
        return;
    }

    File file = new File(path);

    if (file.exists()) {
        Intent target = new Intent(Intent.ACTION_VIEW);

        Uri uri = FileProvider.getUriForFile(view.getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
        String mimeType = URLConnection.guessContentTypeFromName(file.getName());

        target.setDataAndType(uri, mimeType);
        target.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        try {
            view.getActivity().startActivity(target);
        } catch (ActivityNotFoundException e) {
            // TODO Instruct the user to install a viewer here
            Log.e("No viewer found", e);
        }
    }
}

说明

String mimeType = URLConnection.guessContentTypeFromName(file.getName());

确定 mime 类型