在硬盘驱动器故障需要重新安装OS之前,我已经在使用Windows 7的计算机上完成了基于Java 8u45的项目的所有开发。据我所知,所有内容都应该与以前的设置非常相似,但是现在我在新安装的应用程序上运行该应用程序时注意到一个错误,但是在同一操作系统上却没有发生相同的错误工作人员的计算机也正在运行Windows7。问题是Files.probeContentType(Path)似乎总是在我的计算机上返回null,而在另一台(和我以前的)计算机上却返回了预期的mime类型。

我们俩都使用JDK 8u45(该项目暂时与该修订版绑定)。我的同事正在使用IDEA 14,而我正在使用IDEA15。还应该注意,它似乎与IDE不相关,因为从编译的可执行文件(使用Launch4j)运行应用程序时,我遇到了相同的问题,即使捆绑了JRE)

我的开发环境为什么会为方法null返回Files.probeContentType,但是另一台具有相同版本OS的计算机却没有原因呢?

最佳答案

在Windows上,Files.probeContentType使用文件扩展名来确定实际的mime类型。找到此扩展名后,它将在Windows注册表中查找文件扩展名。您可以在HKEY_CLASSES_ROOT注册表配置单元中找到文件扩展名列表。如果此配置单元包含您要求的文件扩展名的密钥,它将在此密钥中查找名为Content Type的字符串。 probeContentType的返回值是此处存储的值。

由于您的Windows版本是全新安装的,因此其注册表中包含的条目少于您的同事使用的条目。可能是您的系统根本不包含您要扩展名的条目的情况,因此probeContentType无法确定有效的mime类型,并返回null。

10-05 22:50