java - Java 返回 YAML mime 类型 null
问题描述
Java 8Files.probeContentType(new File("config.yml").toPath());
返回null
. 为什么 java 找不到 yaml mime 类型,但可以找到 xml as text/xml
?还有其他方法吗?
foo: bar
解决方案
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
推荐阅读
- file-upload - 如何使用 url 读取存储在 Azure 存储中的图像
- java - 如何从批处理文件代码执行java文件?
- rust - 为什么将结构传递给 Rust 中的函数会永久地将其移动到该函数?
- oracle - Oracle SQLDeveloper 数据库副本上的字符 146 转换为 14844057
- java - 如何从java中的字母数字字符串中删除小数部分
- python - python函数的时空复杂度
- excel - 如何在 VBA 中将 LINEST 用于多项式函数?
- regex - 如何使用 sed 注释包含行
- java - 如何使用 textview 中的数据绘制折线图,并且该数据是由心率测量仪器生成的
- javascript - 如何在 vue.js 项目中的谷歌地图上添加多个圆圈