首页 > 解决方案 > (Java 11+)模块的类 getResource URL 是否应该包含 /modules 前缀?

问题描述

返回的 URLClass.getResource不包括/modules模块资源,但可以从 URL 加载内容。但是,当使用 nio 时,路径开头的FileSystem期望:/modules

URL url = String.class.getResource("String.class");
System.out.println(url); // jrt:/java.base/java/lang/String.class

try (InputStream in = url.openStream()) {
    in.readAllBytes(); // Success
}

Path path = Path.of(URI.create("jrt:/modules/java.base/java/lang/String.class"));
System.out.println(path); // /modules/java.base/java/lang/String.class
Files.readAllBytes(path); // Success

path = Path.of(url.toURI());
System.out.println(path); // /java.base/java/lang/String.class
Files.readAllBytes(path); // NoSuchFileException

这些方法之一 ( URL/ Path) 不正确吗?似乎在 URI 之间保持一致性会很好。

标签: javamoduleresources

解决方案


看起来不一致已在 JDK13b23 中修复:
https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=8216553


推荐阅读