解决从 JAR 加载资源时的“getResourceAsStream 返回 Null”问题
尝试从编译的 JAR 中的包加载文本文件时, getResourceAsStream 方法可能返回 null,这让开发人员感到困惑。本文深入研究了该问题并提供了解决方案。
最初尝试使用 Class::getResourceAsStream 和各种参数加载文件都导致打印 null。这种意外行为是由于 Class::getResourceAsStream(...) 方法使用的系统类加载器无法识别 JAR,因此无法访问 JAR 文件中的资源。
要解决此问题,需要使用能够访问 JAR 中资源的适当类加载器。在Java中,每个类都由一个类加载器加载,加载Lifepaths类的类加载器将有权访问JAR中的资源。因此,正确的加载文件的方法是直接使用 Class::getResourceAsStream() 方法,如下所示:
public static InputStream loadResource() { return Lifepaths.class.getResourceAsStream("/initialization/Lifepaths.txt"); }
注意,调用 getResourceAsStream(name) 时,名称必须以“/”开头”。这确保了资源是从类路径的根加载的,对于类加载器正确定位文件至关重要。
以上是从 JAR 加载资源时,为什么 getResourceAsStream 返回 Null,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!