Java 如何使用文件二进制内容查找文件mime类型/内容类型?

Java 如何使用文件二进制内容查找文件mime类型/内容类型?,java,file,mime-types,content-type,Java,File,Mime Types,Content Type,我有文件内容,当前为byte[],我想知道它的mime类型/内容类型头 问题是,我在web上看到了许多示例来查找它,但只有当文件实际存在时才查找 如何仅通过此字节[]获取此信息 我测试的大多数代码如下: File f = new File("gumby.gif"); System.out.println("Mime Type: " + new MimetypesFileTypeMap().getContentType(f)); 编辑1: 这段代码给了我一个错误的结果:application/o

我有文件内容,当前为
byte[]
,我想知道它的mime类型/内容类型头

问题是,我在web上看到了许多示例来查找它,但只有当文件实际存在时才查找

如何仅通过此
字节[]
获取此信息

我测试的大多数代码如下:

File f = new File("gumby.gif");
System.out.println("Mime Type: " + new MimetypesFileTypeMap().getContentType(f));
编辑1: 这段代码给了我一个错误的结果:
application/octet-stream

有没有一种方法可以在不创建文件的情况下获取此信息

编辑2: 我尝试了以下代码:

public static void main(String[] args) throws Exception{

    Tika tika = new Tika();     
    byte[] content = readFile().getBytes();     
    System.out.println(tika.detect(content));
}    

private static String readFile() throws Exception{
    BufferedReader br = new BufferedReader(new FileReader("c:\\pic.jpg"));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }
        String everything = sb.toString();
        return everything;
    } finally {
        br.close();
    }       
}

它总是返回
application/octet-stream
,这是因为我使用
byte[]
作为参数吗?

您有没有看到任何方法来识别Java程序中现有文件的MIME类型(不调用外部本机可执行文件)?没有,大多数示例都是在创建它时,您可能需要使用一个库来解析文件头以猜测其内容。ApacheTika似乎是您所需要的()这似乎是一个复制品。我已将其标记为关闭。你可以在这个问题上找到所有的方法。只要看一下文件: