繁体   English   中英

Class.getResourceAsStream()问题

[英]Class.getResourceAsStream() issue

我有一个带有java类的JAR-archive。 其中一个使用嵌入到同一JAR中的一些资源。 为了加载我使用的资源

MyClass.class.getResourceAsStream(myResourceName);

但困扰我的一件事是,是否保证从同一个JAR中加载所需的资源。 “getResourceAsStream()”方法(以及相应的ClassLoader方法)的文档对我来说并不是很清楚。

如果在我的JAR之前有一个具有相同名称的资源位于JVM类路径中的某个位置,会发生什么? 是否会加载该资源而不是我的JAR中嵌入的资源? 有没有其他方法来替换JAR中嵌入的资源?

是。 返回类路径上找到的第一个匹配资源,就像可执行搜索路径一样。 这就是为什么资源通常通过将它们放在镜像库或应用程序的包结构的目录中来“命名空间”的原因。

在存在自定义类加载器(例如在OSGi中)时,此行为可能略有不同,但对于vanilla Java应用程序,情况就是这样。

它的工作方式与查找类文件的方式大致相同。 所以首先尝试父类加载器(递归),然后执行类加载器实现所做的任何事情来查找文件。

没有检查直接调用者类加载器(如ResourceBundle所做的那样 - 参见Java安全编码指南的第6.3节)。 但是,您确实需要打开URL权限,因为ClassLoader.getResourceAsStream只是在默认实现中调用URL.openStream

指定包。 假设你使用com.yourcompany.file它应该是唯一的。 (除非有人想通过类路径覆盖你的配置文件。)

如果只想从特定的JAR读取文件,可以打开JarFile并直接读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM