首页 > 解决方案 > Java 返回 YAML mime 类型 null

问题描述

Java 8Files.probeContentType(new File("config.yml").toPath());返回null. 为什么 java 找不到 yaml mime 类型,但可以找到 xml as text/xml?还有其他方法吗?

foo: bar

标签: javayamlmime-types

解决方案


Windows 上的默认实现使用注册表来查找内容类型。您需要创建注册表项HKEY_CLASSES_ROOT\.yml并在其下方添加一个字符串值Content Type,该值具有您要用作 MIME 类型的值。您可以将以下内容另存为yaml.reg并使用它为您添加必要的密钥:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.yml]
"Content Type"="application/x-yaml"

或者,如果您想使用Files.probeContentType(…)但不想依赖提供的默认实现,您可以创建自己的FileTypeDetector

package com.example;

public class CustomFileTypeDetector extends FileTypeDetector
{
    public CustomFileTypeDetector()
    {
    }

    @Override
    public String probeContentType(Path path)
        throws IOException
    {
        // Some error checking omitted for brevity
        String filename = path.getFileName().toString();

        if (filename.endsWith(".yml") || filename.endsWith(".yaml")) {
            // See https://stackoverflow.com/a/332159/21926
            return "application/x-yaml";
        }

        return null;
    }
}

您还需要创建一个ServiceLoader可以找到的文件,因为这就是它发现FileTypeDetector. 假设 Maven,您将创建一个文件:

src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector

具有以下内容(基于上面的示例代码):

com.example.CustomFileTypeDetector

推荐阅读