java.lang.Class.getResources 的使用
我今天看到了一些关于使用 java.lang.Class.getResources()
和 java.lang.Class.getResourcesAsStream()
的帖子。不知何故,我仍然感到困惑。
我有一个包含此结构的 Jar 文件 (resources/test.xml)
这个 jar 文件位于我的应用程序的类路径上,当我调用下面的代码时,它返回 null,即值映射URL 为空。
URL mappingURL = this.getClass().getResource("/resources/test.xml");
但是,当我将 XML 文件以分解格式存储在类路径上时,即通过创建目录“resources”并在其中存储 mapping.xml ,它就可以工作。
稍后我将使用此 URL 来读取“test.xml”文件的内容。
这是否意味着 getResources() 不是从 Jar 内部读取文件的适当方法?我不明白为什么当 Jar 文件中存在文件 (test.xml) 时 mappingURL
为 null?
I've seen some posts on using java.lang.Class.getResources()
and java.lang.Class.getResourcesAsStream()
on SO today. Somehow, I still have confusion.
I have a Jar file that contains this structure (resources/test.xml)
This jar file is on the classpath of my application, and when I call below piece of code, it returns null, i.e. value of mappingURL is null.
URL mappingURL = this.getClass().getResource("/resources/test.xml");
However when I store the XML file in exploded format on the classpath i.e. by creating a directory "resources" and storing mapping.xml inside, it works.
I'm using this URL for reading the content of the "test.xml" file later.
Does that mean, getResources()
is not the appropriate method for reading the files from inside a Jar? I didn't understand why mappingURL
is null when file (test.xml) is present in the Jar file?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果找不到资源,
getResource()
方法将返回null
。您在资源前面加上/
前缀,这意味着它正在尝试在文件夹中查找。您应该能够删除前导/
并达到您的预期结果。以下是文档中的
getResource()
方法描述:The
getResource()
method will returnnull
if it cannot find the resource. You are prefixing the resource with a/
which means that it is trying to look in the folder. You should be able to remove the leading/
and achieve your intended result.Here is the
getResource()
method description from the documentation:如果您开始使用的类文件也在同一个 JAR 文件中,那么这应该可以工作。
That should work, provided that the class file you are starting with is also in the same JAR file.
这是正确的。如果您的资源将捆绑在 jar 中,您总是需要使用 getResourceAsStream()。
一行之后,您就可以开始读取该文件:
This is correct. If your resource will be bundled in a jar, you always want to use
getResourceAsStream()
.A single line later and you can start reading the file: