首页 > 解决方案 > Files.probeContentType() 在 OpenJDK 11 上返回 null

问题描述

似乎在 OpenJDK 11 上Files.probeContentType()返回null文件(其中文件名未指示 MIME 类型),而它在 OpenJDK 8(在 Linux x64 上)上工作。这是什么原因?

注意:它可能适用于由名称指示类型的文件,例如,“test.pdf”将生成“application/pdf”,但将文件重命名为“test”将生成null.

标签: javafile-iojava-11

解决方案


文件类型检测很大程度上是特定于平台的,被认为不可靠。例如,GnomeFileTypeDetector在 JDK 8 中可用,但仅适用于 Linux 系统。

OpenJDK 开发人员已决定从 JDK 中删除GnomeFileTypeDetectorMagicFileTypeDetector已在 JDK 9 中),请参阅OpenJDK 错误跟踪器 和此处

可用的检测器MimeTypesFileTypeDetector(在 Linux 上)或RegistryFileTypeDetectorWindows 上只是实现从文件扩展名到 MIME 类型的映射,但不检查文件的实际内容。

(注意:所有检测器实现都在 package 中找到(或没有)sun.nio.fs。)


推荐阅读